将单元格定义扩展到CellFrameLabels定义
我正在创建一个包含写入文档样式的笔记本。 我希望Mathematica的行为与LaTeX类似,因为当我编写一个"Definition"
单元格时,它会写入"Definition [Chapter#].[Definition#]"
。
看看我的意思是做以下事情。 在一个空白笔记本中创建一个单元格,并将样式修改为"Chapter"
。 你可以通过选择单元格,然后转到Format->Style->Other
,进入"Chapter"
。
现在转到Format->Edit StyleSheet...
在输入框中输入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]
。
在上面的图片中,我创建了几个章节单元格,并添加了文本: ": Title of Chapter #"
。
这很简单,我们可以创建任何单元格,应用定义并采用计数器的优势来标记单元格。
我已经注意到一些书中的定义被封装在框中。 所以在这种情况下,我想创建一个包含Definition
的框。 这是我对定义单元格"Definition"
蹩脚尝试。
Cell[StyleData["Definition"],
CellFrame->{{0, 0}, {0, 2}},
ShowCellBracket->Automatic,
CellMargins->{{27, 27}, {0, 8}},
PageBreakWithin->False,
CellFrameMargins->16,
CellFrameColor->RGBColor[0.641154, 0.223011, 0.0623026],
Background->RGBColor[0.963821, 0.927581, 0.844465],
FontFamily->"Verdana",
CounterIncrements->"Definition",
FontSize->12,
CellFrameLabels->{{
Cell[
TextData[{
"Definition ",
CounterBox["Chapter"], ".",
CounterBox["Definition"]
}], "DefinitionLabel", CellBaseline -> Baseline], Inherited}, {
Inherited, Inherited}},
]
以下是它在笔记本中的外观:
这里有一个问题:有没有办法让CellFrameLabels
成为单元格的一部分? 我希望标签具有相同的背景并与其他文本内联。 以下是我希望它看起来如何的屏幕截图:
我制作了“标签”粗体字体和蓝色。 这是用户不应该修改的东西。
我不认为有可能以你想要的方式去做。 CellLabel
只能是文本,而CellDingbat
和CellFrameLabels
都可以是任意单元格表达式。
如果单元格只有一行CellFrameLabels -> {{...,None},{None,None}}
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}}]]
现在我可以在现有单元格中使用别名 - 它继承了父单元格的样式(除非另有说明):
另一个选择是制作一个调色板来与您的样式表一起使用。 这会很有用,因为只有有限的MenuCommandKey值可以用于新的样式(nb覆盖默认值只会让人感到困惑)。 看到这个答案为这样一个调色板的例子。
链接地址: http://www.djcxy.com/p/35559.html上一篇: Extending cell definition to CellFrameLabels definition