Wolfram mathematica 将单元格定义扩展到CellFrameLabels定义
我正在创建一个笔记本,其中包含一种书写文档的风格。我希望Mathematica的行为类似于LaTeX,即当我编写一个Wolfram mathematica 将单元格定义扩展到CellFrameLabels定义,wolfram-mathematica,Wolfram Mathematica,我正在创建一个笔记本,其中包含一种书写文档的风格。我希望Mathematica的行为类似于LaTeX,即当我编写一个“Definition”单元时,它将编写“Definition[Chapter.#].[Definition.#]” 要了解我的意思,请执行以下操作。在空笔记本中创建一个单元格,并将样式修改为“Chapter”。您可以通过选择单元格并转到格式->样式->其他,然后输入“Chapter” 现在转到格式->编辑样式表…。在输入框中输入章节。这将生成一个标有章节的单元格。选择该单元格,然
“Definition”
单元时,它将编写“Definition[Chapter.#].[Definition.#]”
要了解我的意思,请执行以下操作。在空笔记本中创建一个单元格,并将样式修改为“Chapter”
。您可以通过选择单元格并转到格式->样式->其他
,然后输入“Chapter”
现在转到格式->编辑样式表…
。在输入框中输入章节
。这将生成一个标有章节的单元格。选择该单元格,然后单击cell->Show Expression
。此时,选择您在此处看到的所有文本,并将其替换为以下内容:
Cell[StyleData["Chapter"],
CellFrame->{{0, 0}, {0, 0}},
ShowCellBracket->Automatic,
CellMargins->{{42, 27}, {10, 30}},
CounterIncrements->"Chapter",
CounterAssignments->{{"Section", 0}, {"Definition", 0}},
FontFamily->"Verdana",
FontSize->24,
FontWeight->"Bold",
CellFrameLabels->{{
Cell[
TextData[{
"Chapter ",
CounterBox["Chapter"]
}], "ChapterLabel", CellBaseline -> Baseline], Inherited}, {
Inherited, Inherited}},
FontColor->RGBColor[0.641154, 0.223011, 0.0623026]]
这将更改章节单元格的显示方式。我改变了颜色和字体。对我来说最重要的是CellFrameLabels
。注意,我将其设置为每次创建章节单元格时都会显示:chapter[chapter Number]
在上图中,我创建了几个章节单元格,并添加了文本:“:章节标题”
这很简单,我们可以创建任何单元格,应用定义并利用计数器来标记单元格
我注意到有些书是如何在盒子里附上定义的。因此,在本例中,我想创建一个包含定义的框。下面是我对单元格定义的拙劣尝试“definition”
以下是它在笔记本中的外观:
问题是:有没有办法使CellFrameLabels
成为单元格的一部分?我希望标签具有相同的背景,并与其他文本内联。以下是我希望它看起来如何的屏幕截图:
我已经把“标签”做成了粗体和蓝色。这是用户不能修改的。我认为不可能按照您想要的方式进行修改CellLabel
s只能是文本,而CellDingbat
和CellFrameLabels
都可以是任意单元格表达式
如果单元格只有一行长,则CellDingbat->…
和CellFrameLabels->{{…,None},{None,None}
都可以工作。但不要自动调整多行单元格的大小(至少据我所知)。例如:
Cell["Abcdefg", "Text",
CellFrame->{{0, 1}, {0, 2}},
CellMargins->{{30, 24}, {6, 6}},
CellFrameMargins->0,
CellFrameColor->RGBColor[0, 0, 1],
CellFrameLabels->{{Cell[" Definition 1.1 ", "Text",
CellFrame -> {{2, 0}, {0, 2}}, CellFrameMargins -> 0], None}, {None, None}},
CellFrameLabelMargins->0,
Background->RGBColor[0, 1, 1]]
在顶部放置CellFrameLabel没有这个问题,但我不知道如何将其向左对齐
Cell["Abcde", "Text",
CellFrame->{{1, 1}, {0, 2}},
CellMargins->{{30, 24}, {6, 6}},
CellFrameMargins->0,
CellFrameColor->RGBColor[0, 0, 1],
CellFrameLabels->{{None, None}, {None,
Cell[" Definition 1.1 ", "Text",
CellFrame -> {{2, 2}, {0, 2}}, CellFrameMargins -> 0]}},
CellFrameLabelMargins->0,
Background->RGBColor[0, 1, 1]]
我认为最好的解决方案可能是在单元格内容中包含“Definition ch.def:”
Cell[TextData[{
Cell["Definition 1.1: ", Editable->False, Selectable->False, Deletable->False],
"Abcdefg"}], "Text",
CellFrame->{{1, 1}, {0, 2}},
CellMargins->{{30, 24}, {6, 6}},
CellFrameColor->RGBColor[0, 0, 1],
Background->RGBColor[0, 1, 1]]
使其不被普通用户删除,并且可能与单元格(框架)标签一样好。它可以包括计数器,以便自动显示正确的编号。唯一的问题是它不会自动出现,但是如果您只是复制一个预先存在的单元格,那么这就不是什么大问题
编辑:添加创建不可删除计数器的
首先我们得到当前的输入别名
oldAliases = InputAliases /. Options[EvaluationNotebook[], InputAliases];
然后用我们的新别名替换任何现有别名EscdefEsc:
newAliases =
Append[DeleteCases[oldAliases, "def" -> _],
"def" -> Cell[TextData[
RowBox[StyleBox[#, FontWeight->"Bold", FontColor->Blue]&/@{"Definition ",
CounterBox["Chapter"], ".", CounterBox["Definition"], ": "}]],(*"Text",*)
Editable -> False, Selectable -> False, Deletable -> False]];
SetOptions[EvaluationNotebook[], InputAliases -> newAliases]
由于我没有您的样式表,我需要设置几个计数器:
CellPrint[Cell["Setting the counters", "Text",
CounterAssignments -> {{"Chapter", 2}, {"Definition", 3}}]]
现在,我可以在现有单元格中使用别名-它继承父单元格的样式(除非另有指定):
另一个选择是使用样式表创建一个。这将非常有用,因为只有一组值可用于新样式(注意:覆盖默认值只会让人困惑)。请参见此类调色板的示例。Simon,我曾想过类似的方法,制作一个不可编辑的文本单元格。问题是,正如您所提到的,除非您复制并粘贴文本,否则文本不会出现在那里。这给了我一个想法。您知道是否可以定义自己的快捷方式吗?例如,[Esc]inf[Esc]绘制无限符号。有没有可能像[Esc]Def[Esc]那样,在主单元格标记中插入带有定义标签的文本和带有背景的计数器?@jmlopez:这是完全可能的。西蒙,我不太明白如何使用RowBox
创建快捷方式。到目前为止,我尝试的是:SetOptions[EvaluationNotebook[],InputAliases->{“def”->RowBox[{“Definition”,CounterBox[“Chapter”],“,”,CounterBox[“Definition”}]}]
,但我似乎无法更改样式或选项以使该单元格不可编辑。有什么建议吗?谢谢你,西蒙。你的计数器显示正确吗?我注意到,当我执行[Esc]Def[Esc]时,带计数器的文本会显示出来,但它以0.0开头。但是,如果我点击任何一个文本并转到ShowExpression,然后返回,计数器将更新为正确的计数器。
CellPrint[Cell["Setting the counters", "Text",
CounterAssignments -> {{"Chapter", 2}, {"Definition", 3}}]]