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"];
Другие вопросы по тегам