首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Mathematica Notebook中自动编号单元格标签?

如何在Mathematica Notebook中自动编号单元格标签?
EN

Stack Overflow用户
提问于 2012-01-18 08:10:57
回答 2查看 1.9K关注 0票数 4

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

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

我创建了一个包含四个文本单元格的小型笔记本

代码语言:javascript
运行
复制
foo
qux
blancmange
bar

将光标放在foo之前,然后使用Insert菜单,Automatic numbering item,出现Create Automatic Numbering Object对话框。我选择了Counter下拉菜单,然后选择了item Text,点击了This counter object单选按钮,然后哈哈!在foo之前获取数字1,大概是指notebook中类型为Text的第一个单元格。我现在明白了

代码语言:javascript
运行
复制
1foo
qux
blancmange
bar

我在1后面插入我自己的dot space,以获得一个漂亮的

代码语言:javascript
运行
复制
1. foo
qux
blancmange
bar

我对bar也做了同样的事情,并看到了预期的

代码语言:javascript
运行
复制
1. foo
qux
blancmange
4. bar

因为barText类型的第四个单元格。太棒了。现在,我想为单元格quxblancmange创建一个独立的编号系统。我使用Cell menu,Cell Tags...Add/Remove Cell tags... item,并将标签test放在单元格quxblancmange上。我使用Cell menu,Cell Tags...Show cell tags item来确保它们在那里,果然,它们会出现在notebook中(我不会试图模仿这里的显示,但在这个问题的底部有一个指向我的notebook的链接,如果你想看看的话)。然后我将光标放在qux前面,使用Insert menu,Automatic numbering item,这次选择Use the counter value corresponding to the location of:,然后选择The first cell with the tag:,然后选择test,我的用户创建的标记,go OK,我得到了一个零!blancmange之前也是如此。在用我自己的dotspace在猪身上涂了一点口红之后,我的最终(糟糕)结果看起来是这样的

代码语言:javascript
运行
复制
1. foo
0. qux
0. blancmange
4. bar

如果尝试引用一个不存在的标记,我会得到

代码语言:javascript
运行
复制
1. foo
XXXqux
XXXblancmange
4. bar

因此,Mathematica认识到了一些东西,但不是我期望或需要的东西。

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

如果有任何建议,我将不胜感激。

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

CellTagsAutonumbering.nb

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-20 11:13:09

我认为您试图以错误的方式使用单元格标签

(我刚刚注意到你在上面的评论中说了这么多)!

计数器仅对已经出现的特定样式的单元进行计数(尽管计数器可以自动或手动重置/改变)。单元格标记是为了便于您以后引用特定的单元格,例如特定的等式或代码块等。

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2012-04-26 08:46:37

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

提取notebook中的所有单元格标签

代码语言:javascript
运行
复制
tags= Union[Cases[NotebookGet[nb], (CellTags -> t_) :> t, Infinity]]

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

代码语言:javascript
运行
复制
Do[
NotebookLocate[tags[[i]]];
(*Some stuff you wanted to do to each cell with a certain tag*)
,{i,1,Length[tags]}
]

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8903484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档