Как автонумеровать метки ячеек в тетрадях 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) Мне нужно нумеровать различные типы ячеек, поэтому мне действительно нужно создавать свои собственные теги и контролировать их отслеживание.
Буду очень признателен за любые советы.
Вот ссылка на мою тривиальную записную книжку.
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]}
]
Надеюсь, это поможет!