CounterIncrements для отдельных клеток
Этот пост проистекает из моего вопроса о расширении определения ячеек на cellframelabels. Я играл с CounterIncrements
и я не получаю то, что я ожидаю.
Как Саймон сделал в своем ответе на пост, который я упомянул, мы начинаем с производства счетчика.
CellPrint[Cell["Setting the counter", "Text",
CounterAssignments -> {{"MyCounter", 0}}]]
Теперь мы печатаем этот счетчик.
CellPrint[Cell[
TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"]}]], "Text"]]
Результатом этого будет:
MyCounter 0
Чтобы увеличить счетчик мы можем использовать опцию CounterIncrements
следующее:
CellPrint[Cell[TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"]}]],
"Text", CounterIncrements -> "MyCounter"]]
Это даст вам:
MyCounter 1
Вы можете ввести это столько раз, сколько хотите, и увидите, что счетчик увеличивается.
поскольку CounterIncrements
это вариант для ячейки, который я сказал себе: "Ну что, если я сделаю ячейку внутри ячейки и установлю эту настройку там?". Так как я делаю ячейку с этой опцией, я ожидаю увеличения счетчика. Это происходит?
CellPrint[
Cell[TextData[
RowBox[{"MyCounter ", CounterBox["MyCounter"],
Cell[TextData[RowBox[{"[InlineCell]"}]], "Text",
CounterIncrements -> "MyCounter"]}]], "Text"]]
Выход:
MyCounter 1[InlineCell]
Я ожидал, что результат будет MyCounter 2[InlineCell]
потому что я сказал клетке внутри клетки увеличить счетчик, но он этого не сделал.
В документации сказано, что CounterIncrements
"не был полностью интегрирован в долгосрочную систему Mathematica и подвержен изменениям", но я думаю, что информация там несколько вводит в заблуждение.
Причина, по которой я этого хочу, заключается в том, что я могу определить стиль, который увеличивает счетчик каждый раз, когда он используется. Но этот стиль будет использоваться для ячейки, которая находится внутри другой ячейки. У кого-то есть представление о том, что здесь происходит? Я использую MMA8 в Mac OS X.
1 ответ
Я предполагаю, что счетчики считаются, только если они находятся в правильной (не встроенной) ячейке. Это нормально, поскольку встроенные ячейки действительно предназначены только для форматирования, а не для структуры документа.
Увеличение счетчика работает нормально, если вы переместите его во внешнюю ячейку. Изменение вашего кода выше:
CellPrint[Cell["Setting the counter to 0", "Text",
CounterAssignments -> {{"MyCounter", 0}}]]
(* Prints a cell containing: Setting the counter to 0 *)
CellPrint[Cell[
TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"],
Cell[TextData[RowBox[{"[InlineCell]"}]], "Text"]}]], "Text",
CounterIncrements -> "MyCounter"]]
(* Prints a cell containing: MyCounter 1[InlineCell] *)
Это что-то вроде твоего предыдущего стиля "Definition"? Если так, то почему у вас нет встроенной ячейки в виде простой (не стилизованной) ячейки, которая наследует свой стиль от внешней ячейки. Тогда просто увеличьте счетчик в стиле "Определение", то есть в таблице стилей? Как я уже говорил выше, нестандартная ячейка должна быть стилизованной (как "Определение", "Глава", "Раздел" и т. Д.), Так как именно она определяет структуру документа.
Редактировать в ответ на комментарии:
Вот палитра, которая создаст новые ячейки глав и новые ячейки определений. Последний со встроенным, нередактируемым счетчиком. Обратите внимание, что большая часть стилей должна быть перенесена в таблицу стилей.
CreatePalette[With[{nb = InputNotebook[]}, {
Button["New Chapter", SelectionMove[nb, After, Cell];
NotebookWrite[nb, Cell["New Chapter", "Chapter" (* Styling is in stylesheet*)]]],
Button["New Definition", SelectionMove[nb, After, Cell];
NotebookWrite[nb, Cell[TextData[RowBox[
{Cell[TextData[
StyleBox[#, FontWeight -> "Bold"] & /@ {
"Definition ", CounterBox["Chapter"], ".", CounterBox["Definition"], ": "}],
Editable -> False, Selectable -> False, Deletable -> False],
"New definition"}]], "Definition", CounterIncrements -> "Definition",
CellFrame -> {{1, 1}, {0, 2}}, CellMargins -> {{30, 24}, {6, 6}},
CellFrameColor -> RGBColor[0, 0, 1], Background -> RGBColor[0, 1, 1]]]
]}], WindowTitle -> "Document writing palette"];