Как получить (не отображать) номер раздела - PullRequest
3 голосов
/ 06 мая 2011

Секции записной книжки могут быть автоматически пронумерованы путем вставки объекта автоматической нумерации CounterBox["Section"] с помощью меню Insert > Automatic Numbering.... Однако этот объект управляет только отображением номера раздела, и я хотел бы получить его числовое значение для использования в программе. Есть идеи, как это сделать?

Редактировать
Причина, по которой я хочу использовать это, изложена здесь .

Ответы [ 2 ]

5 голосов
/ 06 мая 2011

Оберните CounterBox тегом Box и известным тегом:

Cell[BoxData[TagBox[CounterBox["Section"], "tag"]], "Text"]

Затем используйте FrontEnd`ObjectContents, чтобы преобразовать все DynamicBox / CounterBox / ValueBox в литералы и выбрать значение этого тега:

x = First@Cases[FrontEnd`ObjectContents[nb, True], TagBox[x_, "tag"] :> x, \[Infinity]]

Если все, что вы хотите знать, это то, сколько счетчиков определенного типа вы можете сделать:

x = FE`Evaluate[CurrentValue[{"MaxCounterValue", "Section"}]]
1 голос
/ 06 мая 2011

Должен быть лучший способ сделать это, но вот кое-что, что работает, если я понимаю, что вы хотите сделать.

Создать блокнот для игры:

nb = CreateDocument[{
    Cell["My Title", "Title"],
    Cell["My first section", "Section"],
    Cell["My second section", "Section"],
    Cell[TextData[{"Section ",
       CounterBox["Section"]}], "Section"]}];

Выберите последнюю ячейку, которая является ячейкой раздела.

SelectionMove[nb, After, Notebook];
SelectionMove[nb, Previous, Cell];

Считай в обратном порядке.

cnt = sectionCnt = c = 0;
While[True, Print[c];
  c = NotebookRead[nb];
  If[c === {}, Break[]];
  If[c[[2]] == "Section", sectionCnt++];
  cnt++;
  SelectionMove[nb, Previous, Cell]];

Теперь sectionCnt должно содержать значение, которое вы хотите. Вы можете вернуться туда, где вам было достаточно легко:

Do[SelectionMove[nb, Next, Cell], {cnt}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...