Как автонумеровать метки ячеек в тетрадях Mathematica?

Я попытался следовать указаниям по автонумерации ячеек в тетради 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 ответа

Решение

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

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

На данный момент ваши клетки помечены как "тестирующие" нас следующим счетчиком CounterBox["Code", "test"], Этот счетчик будет искать первую ячейку стиля кода с тегом "test" и печатать ее номер. Поскольку у вас нет кодовых блоков с тегом "test", он возвращает ноль.

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

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

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

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

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

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

Другие вопросы по тегам