如何在Mathematica笔记本中自动编号单元格标签?

时间:2012-01-18 00:10:57

标签: wolfram-mathematica mathematica-frontend

我尝试按照Mathematica-8笔记本中自动编号细胞的说明进行操作

http://reference.wolfram.com/mathematica/tutorial/AutomaticNumbering.html

我创建了一个带有四个文本单元的小笔记本

foo
qux
blancmange
bar

将光标放在foo之前,然后我使用Insert菜单Automatic numbering项,给我Create Automatic Numbering Object对话框。我在Counter下拉列表中选择了Text项,点击了This counter object单选按钮和Huzzah!在foo之前获得了数字1,可能是指笔记本中第一个Text类型的单元格。我现在看到了

1foo
qux
blancmange
bar

我在1之后插入我自己的dot space以获得漂亮的

1. foo
qux
blancmange
bar

我同样使用bar并查看预期的

1. foo
qux
blancmange
4. bar

因为barText类型的第四个单元格。大。现在,我想为单元格quxblancmange创建一个独立的编号系统。我使用Cell菜单,Cell Tags...Add/Remove Cell tags...项,并将标记test放在单元格quxblancmange上。我使用Cell菜单,Cell Tags...Show cell tags项来确保它们存在,并且,当然,它们会出现在笔记本中(我不会尝试模仿显示,在这里,但如果你想看一下,在这个问题的底部有一个Dropbox公共文件夹中的笔记本链接。然后我将光标放在qux之前并使用Insert菜单Automatic numbering项,这次选择Use the counter value corresponding to the location of:,然后选择The first cell with the tag:,然后选择test,我的用户创建的标签,好的,我得到一个零!在blancmange之前同上。在我用自己的dotspace给猪做一点口红后,我的最终(不好)结果看起来像

1. foo
0. qux
0. blancmange
4. bar

如果尝试引用不存在的标记,我会

1. foo
XXXqux
XXXblancmange
4. bar

所以Mathematica认识到了某些东西,但不是我所期望或需要的东西。

我还需要说我在Item Numbered项中尝试了Format项,但我遇到了两个问题:(1)我不知道如何从1重新编号,因此Item Numbered个单元格的每个块都属于相同的编号项目序列。我得到1,2,3,这里,然后是4,5,6,之后,以及7,8,9,甚至更晚等。我真的需要独立编号的项目块:1,2,3这里,1,2 ,3以后,以及1,2,3甚至更晚等。(2)我需要编号各种不同类型的单元格,所以我真的需要创建自己的标签并控制我对它们的跟踪。

我将非常感谢任何建议。

这是我琐碎的小笔记本的链接。

CellTagsAutonumbering.nb

2 个答案:

答案 0 :(得分:2)

我认为您正试图以错误的方式使用单元格标签 (我只是注意到你在上面的评论中说了很多)!

计数器仅计算已经发生的特定样式的单元格数量(尽管计数器可以自动或手动重置/更改)。单元格标签是以后您可以引用特定单元格,例如特定的公式或代码块等...

目前,您的小组标记了“测试”我们以下的计数器CounterBox["Code", "test"]。 此计数器将查找标记为“test”的第一个代码样式单元格并打印其编号。由于您没有标记为“test”的代码块,因此它返回零。

如果你想要一个类似文本的单元格,它使用与普通文本单元格不同的计数器, 那么你需要编写一个新的文本样式。 转到格式>编辑样式表。然后单击default.nb并将Text样式单元格复制到笔记本的样式表中。然后,您可以将其修改为具有不同的名称(例如,“Text2”)和不同的计数器。然后,您可以使用CounterBox["Text2"]引用这些单元格数字,就像使用普通文本单元格一样。

您也可以通过将CounterBox添加到CellDingbatCellFrameLabels来自动编号。例如,请参阅:Extending cell definition to CellFrameLabels definitionCounterIncrements for individual cells

答案 1 :(得分:1)

对于那些尝试做类似事情的人: 我建议你做以下事情:

提取笔记本中的所有单元格标签

tags= Union[Cases[NotebookGet[nb], (CellTags -> t_) :> t, Infinity]]

通过查找标签循环遍历单元格:

Do[
NotebookLocate[tags[[i]]];
(*Some stuff you wanted to do to each cell with a certain tag*)
,{i,1,Length[tags]}
]

希望有所帮助!