单个细胞的CounterIncrements

时间:2011-08-31 01:58:06

标签: wolfram-mathematica

这篇文章来自我的问题extending cell definition to cellframelabels。我一直在玩CounterIncrements并且我没有得到我期待的东西。

正如西蒙在回答我提到的帖子时所做的那样,我们首先要制作一个计数器。

CellPrint[Cell["Setting the counter", "Text", 
  CounterAssignments -> {{"MyCounter", 0}}]]

现在我们打印这个计数器。

CellPrint[Cell[
  TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"]}]], "Text"]]

结果将是:

MyCounter 0

要增加计数器,我们可以使用选项CounterIncrements,如下所示:

CellPrint[Cell[TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"]}]], 
 "Text", CounterIncrements -> "MyCounter"]]

这会给你:

MyCounter 1

您可以根据需要多次输入,然后您会看到计数器增加。

由于CounterIncrements是一个细胞的选项,我对自己说:“好吧,如果我在细胞内制作细胞并在那里设置这个选项怎么办?”。由于我用这个选项制作一个单元格,我希望计数器能够增加。这会发生吗?

CellPrint[
 Cell[TextData[
   RowBox[{"MyCounter ", CounterBox["MyCounter"], 
    Cell[TextData[RowBox[{"[InlineCell]"}]], "Text", 
  CounterIncrements -> "MyCounter"]}]], "Text"]]

输出结果为:

MyCounter 1[InlineCell]

我原本期望输出为MyCounter 2[InlineCell]因为我告诉单元格中的单元格增加了计数器,但它没有这样做。

文档说CounterIncrements“尚未完全整合到长期的Mathematica系统中,并且可能会发生变化”但我认为这些信息有些误导。

我想要的原因是我可以定义一种每次使用时都会增加计数器的样式。但是这种风格将用于另一个细胞内的细胞。有人知道这里发生了什么吗?我在Mac OS X中使用MMA8。

1 个答案:

答案 0 :(得分:3)

我的猜测是,只有当计数器位于正确的(非内联)单元格中时才会计数。 这很好,因为内联单元格仅用于格式化目的,而不用于文档结构。

如果将计数器移动到外部单元格,则计数器增加正常。修改上面的代码:

CellPrint[Cell["Setting the counter to 0", "Text", 
  CounterAssignments -> {{"MyCounter", 0}}]]

(* Prints a cell containing: Setting the counter to 0 *)

CellPrint[Cell[
  TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"], 
     Cell[TextData[RowBox[{"[InlineCell]"}]], "Text"]}]], "Text", 
  CounterIncrements -> "MyCounter"]]

(* Prints a cell containing: MyCounter 1[InlineCell] *)

这是your previous "Definition" style之类的吗?如果是这样,那么为什么不将内联单元格作为从外部单元格继承其样式的普通(无样式)单元格。然后只是在“定义”样式中,即在样式表中增加计数器? 如上所述,非内联单元格应该是样式的单元格(作为“定义”,“章节”,“部分”等等),因为它是确定文档结构的单元格。


编辑以回应评论:

这是一个调色板,可以创建新的章节单元格和新的定义单元格。 后者带有内置的,不可编辑的计数器。 请注意,大多数样式应移动到样式表中。

CreatePalette[With[{nb = InputNotebook[]}, {
 Button["New Chapter", SelectionMove[nb, After, Cell];
  NotebookWrite[nb, Cell["New Chapter", "Chapter" (* Styling is in stylesheet*)]]],
 Button["New Definition", SelectionMove[nb, After, Cell];
  NotebookWrite[nb, Cell[TextData[RowBox[
   {Cell[TextData[
     StyleBox[#, FontWeight -> "Bold"] & /@ {
       "Definition ", CounterBox["Chapter"], ".", CounterBox["Definition"], ":  "}],
     Editable -> False, Selectable -> False, Deletable -> False],
     "New definition"}]], "Definition", CounterIncrements -> "Definition",
    CellFrame -> {{1, 1}, {0, 2}}, CellMargins -> {{30, 24}, {6, 6}}, 
    CellFrameColor -> RGBColor[0, 0, 1], Background -> RGBColor[0, 1, 1]]]
 ]}], WindowTitle -> "Document writing palette"];