Как автонумеровать метки ячеек в тетрадях Mathematica? - PullRequest
4 голосов
/ 18 января 2012

Я пытался следовать указаниям по автонумерации ячеек в записной книжке 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! получил номер 1 непосредственно перед foo, предположительно ссылаясь на первую ячейку типа Text в блокноте. Теперь я вижу

1foo
qux
blancmange
bar

и я вставляю свой dot space после 1, чтобы получить красивый

1. foo
qux
blancmange
bar

Я делаю то же самое с bar и вижу ожидаемое

1. foo
qux
blancmange
4. bar

потому что bar является четвертой ячейкой типа Text. Отлично. Теперь я хочу создать независимую систему нумерации для ячеек qux и blancmange. Я использую меню Cell, пункт Cell Tags..., Add/Remove Cell tags... и помещаю тег test в ячейки qux и blancmange. Я использую меню 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. Мой окончательный (плохой) результат, после нанесения маленькой помады на свинью с моими собственными dot и space, выглядит как

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 ]

2 голосов
/ 20 января 2012

Я думаю, что вы пытаетесь использовать теги ячеек неправильно
(и я только что заметил, что вы сказали столько же в комментарии выше)!

Счетчики учитывают только количество ячеекопределенный стиль уже произошел (хотя счетчики могут быть автоматически или вручную сброшены / изменены).Теги ячеек предназначены для того, чтобы вы могли ссылаться на определенную ячейку позже, например, на конкретное уравнение или кодовый блок и т. Д. *

В данный момент ваши ячейки помечены как "протестировать" нас следующим счетчиком * 1006.*.Этот счетчик будет искать первую ячейку стиля кода с тегом «test» и печатать ее номер.Поскольку у вас нет кодовых блоков с тегом «test», он возвращает ноль.

Если вы хотите, чтобы текстоподобная ячейка использовала счетчик, отличный от обычных текстовых ячеек, то вам нужно создать новый стиль текста,Перейдите в Формат> Редактировать таблицу стилей.Затем нажмите на default.nb и скопируйте ячейку стиля текста в таблицу стилей вашего ноутбука.Затем вы можете изменить его, чтобы иметь другое имя (например, «Text2») и другой счетчик.Затем вы можете ссылаться на эти номера ячеек, используя CounterBox["Text2"], так же, как вы это делали с обычными текстовыми ячейками.

Вы также можете автоматически нумеровать их, добавляя CounterBox к CellDingbat или CellFrameLabels,См., Например: Расширение определения ячейки до определения CellFrameLabels и CounterIncrement для отдельных ячеек

1 голос
/ 26 апреля 2012

Для тех из вас, кто пытается сделать что-то подобное: я бы порекомендовал сделать следующее:

Извлечь все теги ячеек в блокноте

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]}
]

Надеюсь, это поможет!

...