
Wie kann ich einen Zähler erstellen, der fixiert ist, sobald er einmal eingestellt wurde?
Die Idee besteht darin, eine Art Anmerkungen in einen Text einzufügen, die nummeriert werden sollten, jedoch aufsteigend mit dem Datum der tatsächlichen Implementierung in den Quellcode.
Sie sollten nicht von der Reihenfolge im Quellcode abhängen und ihren Wert behalten, auch wenn einige von ihnen entfernt werden.
Hier kein MWE, aber eine Idee wie die Umsetzung aussehen könnte:
\documentclass{article}
\begin{document}
\mynote{Some note I've added first},
\mynote{A fourth note},
\mynote{A second note},
\mynote{A fifth note},
\mynote{A third note}.
\end{document}
Dies sollte eine Ausgabe wie folgt ergeben:
Anmerkung 1:Einige Anmerkungen, die ich zuerst hinzugefügt habe
Anmerkung 4:Eine vierte Anmerkung,
Anmerkung 2:Eine zweite Anmerkung:
Anmerkung 5:Eine fünfte Note,
Notiz 3:Eine dritte Anmerkung.
Wenn ich die Zeile mit der zweiten Notiz lösche, sollte Folgendes erscheinen:
Anmerkung 1:Einige Anmerkungen habe ich zuerst hinzugefügt,
Anmerkung 4:Eine vierte Anmerkung,
Anmerkung 5:Eine fünfte Note,
Notiz 3:Eine dritte Anmerkung.
Antwort1
Hier ist ein Proof of Concept, aber die Verwendung einer Hilfsdatei auf diese Weise ist sehr gefährlich, da ein Fehler die vorherige Kopie zerstören könnte und die Reihenfolge der Notizen verloren ginge. Daher .notes
muss am Ende des LaTeX-Jobs eine Routine ausgeführt werden, die die Datei sichert.
\documentclass{article}
\makeatletter
\newwrite\jjdbout
\newcounter{jjdbnotes}
\def\countnotes#1#2{\stepcounter{jjdbnotes}}
\def\savenote#1#2{%
\expandafter\gdef\csname #1\endcsname{#2}%
\addnote{#1}{#2}%
}
\makeatletter
\def\addnote#1#2{%
\toks@=\expandafter{\jjdbnotes}%
\xdef\jjdbnotes{\the\toks@^^J%
\noexpand\jjdbnote{#1}{#2}}%
}
\makeatother
\let\jjdbnote\countnotes
\InputIfFileExists{\jobname.notes}{}{}
\let\jjdbnote\savenote
\gdef\jjdbnotes{} % initialize
\InputIfFileExists{\jobname.notes}{}{}
\newcommand{\mynote}[1]{%
\par
\ifcsname\pdfmdfivesum{#1}\endcsname
\textbf{Note \csname\pdfmdfivesum{#1}\endcsname: }#1%
\else
\stepcounter{jjdbnotes}%
\expandafter\addnote{\pdfmdfivesum{#1}}{\thejjdbnotes}%
\textbf{Note \thejjdbnotes: }#1%
\fi
}
\AtEndDocument{
\immediate\openout\jjdbout=\jobname.notes
\immediate\write\jjdbout{\unexpanded\expandafter{\jjdbnotes}}
}
\begin{document}
\mynote{Some note I've added first},
\mynote{A fourth note},
\mynote{A second note},
\mynote{A fifth note},
\mynote{A third note}.
\end{document}
Die .notes
Datei wird zweimal gelesen; das erste Mal zum Zählen der Einträge und das zweite Mal, um den Zeilen eine Bedeutung zuzuweisen.
Zu jeder Notiz wird eine MD5-Prüfsumme gespeichert, die dem Text eindeutig zugeordnet werden sollte. Wird ein Notiztext geändert, geht die Sortierung natürlich wieder verloren.
Jeder Prüfsumme wird also eine Notiznummer zugeordnet. Finden wir während eines Laufs eine neue Notiz, wird diese dem Makro hinzugefügt , dessen Inhalt am Ende des Jobs \jjdbnotes
in die Datei geschrieben wird . Beachten Sie, dass TeX einer bestehenden Datei keine Zeilen anhängen kann..notes
Die angezeigte Ausgabe wurde erhalten, indem die Zeilen nacheinander in der angegebenen Reihenfolge auskommentiert wurden.
Ein besserer Ansatz wäre, die Notizen in einer separaten Datei zu speichern, notes.tex
beispielsweise in der Form
\makeatletter
\newcommand{\savenote}[2]{\@namedef{jjdb@note#2}{#1}}
\newcommand{\mynote}[1]{\@nameuse{jjdb@note#1}}
\makeatother
\savenote{Some note I've added first}{1}
\savenote{A second note}{2}
\savenote{A third note}{3}
\savenote{A fourth note}{4}
\savenote{A fifth note}{5}
und tun Sie dies \input{notes}
in der Präambel. Dann können Sie im Dokument verwenden
\mynote{1},
\mynote{4},
\mynote{2},
\mynote{5},
\mynote{3}.
Auf diese Weise fügen Sie die Noten einfach der Reihe nach ein.
Antwort2
Ich denke, dass Sie genau den Fall wollen, in dem Ihnen die Querverweise in LaTeX nicht weiterhelfen: Es reicht, sie fest zu codieren. Wenn Sie formatieren möchten (Fettdruck usw.), können Sie eine description
Umgebung verwenden oder Ihren eigenen Befehl erstellen, wie:
\newcommand{\mynote}[1]{\par\noindent\bfseries Note#1}
und Verwendung
\mynote{1} some text
\mynote{3} some other text
BEARBEITEN: Fügen Sie, wie von anderen Benutzern vorgeschlagen, „\write command in
\mynote“ hinzu, um etwas wie Folgendes zu erhalten:
\documentclass{article}
\begin{document}
\newwrite\notenumber
\immediate\openout\notenumber=note.dat
\newcommand{\mynote}[1]{%
\immediate\write\notenumber{#1}\par\noindent\bfseries Note~#1:}
\mynote{3} the note number 3
\mynote{1} the note number 1
\end{document}
Sie können sie dann in Ihrem Texteditor oder in LaTeX sortieren, indem Sie die Antwort vondiese Frage