
Ich habe mithilfe des Pakets eine benutzerdefinierte Liste namens „Liste fehlender Dinge“ definiert tocloft
. Die Liste enthält einige Elemente, und der listof
Befehl gibt mir die entsprechende Liste. Im Wesentlichen sollte diese Liste nur angezeigt werden, wenn sie Elemente enthält. Andernfalls möchte ich, dass sie überhaupt nichts ausgibt. Ich möchte dies verwenden, um Dinge zu markieren, die ich meiner Arbeit noch hinzufügen muss, aber dann nichts anderes aus dem Code entfernen, sobald alle fehlenden Dinge auf die eine oder andere Weise behoben wurden.
Ich möchte aus Kompatibilitätsgründen so wenig zusätzliche Pakete wie möglich verwenden. Ich habe dies bereits in .sty
Form gebracht und überlege noch, es irgendwann hochzuladen, wenn es sich als nützlich erweist.
Was ich alsoGedankeIch musste den durch den listof
Befehl erstellten Zähler überprüfen. Ich habe versucht, zu verwenden \ifnum\value{missingthings}=0
, aber da ich den Befehl direkt nach verwende \listoftables
, ist der Wert des Zählers missingthings
0,0. Ich dachte, ich müsste überprüfen, ob die Datei test.lomt
irgendwelche Inhaltszeilen enthält.
Wie würde ich dabei vorgehen? Ich habe hier ähnliche Themen zur Verwendung des Pakets etoc
oder ähnliche Dinge zur Überprüfung der TOC-Datei gelesen, aber das hilft mir in meinem Fall nicht wirklich, oder?
Und was ist mit meinem los ifnum
? Es scheint nicht richtig zu funktionieren, da das \listofmissingthings
weiterhin gedruckt wird, auch wenn es am Anfang des Dokuments platziert wird.
MWE:
\documentclass{scrartcl}
\usepackage{tocloft}
\newlistof[section]{missingthings}{lomt}{List of Missing Things}
\newcommand{\missingthing}[2]{%
\refstepcounter{missingthings}
\par\noindent\textbf{Missing Thing \themissingthings: #1.} \newline #2
\addcontentsline{lomt}{missingthings}{\protect\numberline{\themissingthings}#1}\par}
\let\oldlistofmissingthings\listofmissingthings%
\renewcommand{\listofmissingthings}{ % Makes LoMT show up in ToC
\ifnum\value{missingthings}=0%
\oldlistofmissingthings%
\addcontentsline{toc}{section}{List of Missing Things}%
\else%
%
\fi%
}%
\begin{document}
\tableofcontents
\listofmissingthings
The current value of the counter missingthings is \themissingthings.
\section{Example}
\missingthing{First Text goes here}{This text only appears in my document, but not in my List of Missing Things}
\section{Another Example}
The current value of the counter missingthings is \themissingthings.
\end{document}
PS: Ich weiß, dass die Verwendung von tocloft
zusammen mit KOMA-Skriptklassen nicht empfohlen wird. Ich habe nicht den Mut gefunden, meine Dokumentklasse zu ändern, daher ist dies ein Thema für einen anderen Tag.
Antwort1
Mithilfe von zwei neuen Zählern und einer Hilfsdatei ( *.aux
) können Sie eine Zählerprüfung im \listofmissingthings
Befehl durchführen, um zu entscheiden, ob dieser Befehl eine Ausgabe erzeugt oder nichts tut. Sie müssen ihn zweimal ausführen, um korrekte Ausgaben zu erhalten.
Zwei neue Zähler definiert als:
\newcounter{writecn}
\newcounter{existcn}
Anfangs sind sie alle gleich 0.
Fügen Sie dann in der Befehlsdefinition \missingthing
Folgendes hinzu:
\ifnum\value{writecn}=0\immediate\write\@auxout{\string\setcounter{existcn}{1}}\fi%
\ifnum\value{writecn}=1\else\setcounter{writecn}{1}\fi%
Die erste Zeile schreibt sofort eine Zeile in die Hilfsdatei \setcounter{existcn}{1}
. Dadurch wird sichergestellt, dass der Zähler gleich 1 und nicht 0 ist, auch wenn der Befehl \listofmissingthings
vor dem Befehl ausgeführt wird . Die zweite Zeile setzt den Zähler nur auf 1, wenn er nicht gleich 1 ist. Auf diese Weise wird die erste Zeile nur ausgeführt, wenn mehrere Befehle ausgegeben wurden.\missingthing
existcn
writecn
\missingthing
Und dann \listofmissingthings
verwenden Sie in der Renewcommand-Definition von den Zähler, existcn
um zu entscheiden, ob die Liste addtocontentsline
in die Ausgabe aufgenommen werden soll. Wie:
\renewcommand{\listofmissingthings}{ % Makes LoMT show up in ToC
\ifnum\value{existcn}=1
\oldlistofmissingthings%
\addcontentsline{toc}{section}{List of Missing Things}
\else\fi%%
}%
Das vollständige funktionierende Beispiel:
\documentclass{scrartcl}
\newcounter{writecn}
\newcounter{existcn}
\usepackage{tocloft}
\newlistof[section]{missingthings}{lomt}{List of Missing Things}
\makeatletter
\newcommand{\missingthing}[2]{%
\ifnum\value{writecn}=0\immediate\write\@auxout{\string\setcounter{existcn}{1}}\fi%
\ifnum\value{writecn}=1\else\setcounter{writecn}{1}\fi%
\refstepcounter{missingthings}%
\par\noindent\textbf{Missing Thing \themissingthings: #1.} \newline #2
\addcontentsline{lomt}{missingthings}{\protect\numberline{\themissingthings}#1}\par}
\makeatother
\let\oldlistofmissingthings\listofmissingthings%
\renewcommand{\listofmissingthings}{ % Makes LoMT show up in ToC
\ifnum\value{existcn}=1
\oldlistofmissingthings%
\addcontentsline{toc}{section}{List of Missing Things}
\else\fi%%
}%
\begin{document}
\tableofcontents
\listofmissingthings
The current value of the counter missingthings is \themissingthings.
\section{Example}
\missingthing{First Text goes here}{This text only appears in my document, but not in my List of Missing Things}
\section{Another Example}
\missingthing{First Text goes here}{This text only appears in my document, but not in my List of Missing Things}
The current value of the counter missingthings is \themissingthings.
\end{document}