4

我试图按照 Mathematica-8 笔记本中自动编号单元格的说明,在这里

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

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

foo
qux
blancmange
bar

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

1foo
qux
blancmange
bar

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

1. foo
qux
blancmange
bar

我也这样做bar并看到预期的

1. foo
qux
blancmange
4. bar

因为bar是 type 的第四个单元格Text。伟大的。现在我想为单元格quxblancmange. 我使用Cellmenu, Cell Tags..., Add/Remove Cell tags... item 并将标签test放在单元格quxblancmange. 我使用Cellmenu, Cell Tags..., Show cell tagsitem 来确保它们在那里,并且,果然,它们出现在笔记本中(我不会试图模仿显示,这里,但在 Dropbox public 中有指向我笔记本的链接如果你想看看这个问题底部的文件夹)。然后我将光标放在前面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 Numbereditem中试了Formatitem,但是我有两个问题:(1)我不知道怎么从1开始restart编号,所以每块Item Numberedcell都属于同一个编号的序列项目。我在这里得到 1、2、3,然后是 4、5、6,稍后,以及 7、8、9,甚至更晚等等。我真的需要独立编号的项目块:这里是 1、2、3,1、2 , 3 之后,1, 2, 3 甚至更晚,等等。 (2) 我需要对各种不同类型的单元格进行编号,所以我真的需要创建自己的标签并控制我对它们的跟踪。

我将非常感谢任何建议。

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

CellTagsAutonumbering.nb

4

2 回答 2

2

我认为您正在尝试以错误的方式使用单元格标签
(我刚刚注意到您在上面的评论中说了这么多)!

计数器仅计算已经出现了多少特定样式的单元格(尽管计数器可以自动或手动重置/更改)。单元格标签是为了让您以后可以引用特定的单元格,例如特定的方程式或代码块等...

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

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

您还可以通过将 添加CounterBoxCellDingbat或来让它们自动编号CellFrameLabels。参见,例如:Extended cell definition to CellFrameLabels definitionCounterIncrements for individual cells

于 2012-01-20T03:13:08.640 回答
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]}
]

希望有帮助!

于 2012-04-26T00:46:36.573 回答