6 Stimmen

CounterIncrements für einzelne Zellen

Dieser Beitrag geht auf meine Frage zurück Ausweitung der Zelldefinition auf Zellrahmen-Etiketten . Ich habe herumgespielt mit CounterIncrements und ich erhalte nicht das, was ich erwarte.

Wie Simon in seiner Antwort auf den von mir erwähnten Beitrag, beginnen wir mit der Erstellung eines Zählers.

CellPrint[Cell["Setting the counter", "Text", 
  CounterAssignments -> {{"MyCounter", 0}}]]

Jetzt drucken wir diesen Zähler aus.

CellPrint[Cell[
  TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"]}]], "Text"]]

Das Ergebnis wird sein:

MyCounter 0

Um den Zähler zu erhöhen, können wir die Option CounterIncrements wie folgt:

CellPrint[Cell[TextData[RowBox[{"MyCounter ", CounterBox["MyCounter"]}]], 
 "Text", CounterIncrements -> "MyCounter"]]

Dies wird Ihnen helfen:

MyCounter 1

Sie können das so oft eingeben, wie Sie wollen, und Sie werden sehen, dass sich der Zähler erhöht.

Desde CounterIncrements ist eine Option für eine Zelle, sagte ich zu mir selbst: "Nun, was ist, wenn ich eine Zelle innerhalb einer Zelle mache und dort diese Option einstelle?". Da ich eine Zelle mit dieser Option erstelle, würde ich erwarten, dass sich der Zähler erhöht. Ist das der Fall?

CellPrint[
 Cell[TextData[
   RowBox[{"MyCounter ", CounterBox["MyCounter"], 
    Cell[TextData[RowBox[{"[InlineCell]"}]], "Text", 
  CounterIncrements -> "MyCounter"]}]], "Text"]]

Die Ausgabe ist:

MyCounter 1[InlineCell]

Ich hatte erwartet, dass die Ausgabe lautet MyCounter 2[InlineCell] denn ich habe der Zelle innerhalb der Zelle gesagt, sie solle den Zähler erhöhen, aber sie hat es nicht getan.

In der Dokumentation heißt es, dass CounterIncrements "ist noch nicht vollständig in das langfristige Mathematica-System integriert und kann sich noch ändern", aber ich denke, dass die Information dort etwas irreführend ist.

Der Grund, warum ich das möchte, ist, dass ich einen Stil definieren kann, der jedes Mal, wenn er verwendet wird, einen Zähler erhöht. Aber diese Formatvorlage wird auf eine Zelle angewendet, die sich innerhalb einer anderen Zelle befindet. Hat jemand eine Idee, was hier passiert? Ich verwende MMA8 unter Mac OS X.

3voto

Simon Punkte 14561

Ich vermute, dass Zähler nur gezählt werden, wenn sie sich in einer richtigen (nicht inline) Zelle befinden. Das ist in Ordnung, denn Inline-Zellen sind eigentlich nur für Formatierungszwecke und nicht für die Dokumentstruktur gedacht.

Die Zählererhöhung funktioniert gut, wenn Sie sie in die äußere Zelle verschieben. Ändern Sie Ihren obigen Code:

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] *)

Ist dies für etwas wie Ihr bisheriger "Definitions"-Stil ? Wenn ja, warum haben Sie dann nicht die Inline-Zelle als eine einfache (ungestylte) Zelle, die ihren Stil von der äußeren Zelle erbt. Dann müssen Sie nur den Zähler im Stil "Definition", d.h. im Stylesheet, erhöhen? Wie ich oben sagte, sollte die nicht-inline Zelle diejenige sein, die gestylt ist (als "Definition", "Kapitel", "Abschnitt", etc.), da sie die Dokumentstruktur bestimmt.


Bearbeiten als Antwort auf Kommentare:

Hier ist eine Palette, mit der neue Kapitelzellen und neue Definitionszellen erstellt werden können. Letztere mit dem eingebauten, nicht editierbaren Zähler. Beachten Sie, dass der größte Teil der Formatierung in das Stylesheet verschoben werden sollte.

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"];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X