
He definido una lista personalizada llamada "Lista de cosas que faltan" usando el paquete tocloft
. La lista contiene un par de elementos y el listof
comando me proporciona la lista respectiva. Básicamente, esta lista sólo debería aparecer si contiene elementos. De lo contrario, me gustaría que no imprimiera nada en absoluto. Me gustaría usar esto para marcar cosas que todavía necesito agregar en mi tesis, pero luego no eliminar nada más del código una vez que todo lo que falta se haya resuelto de una forma u otra.
Lo que me gustaría es utilizar la menor cantidad posible de paquetes adicionales, por razones de compatibilidad. Ya puse esto en .sty
formato y todavía estoy considerando subirlo en algún momento si resulta útil.
Entonces lo que yopensamientoLo que tenía que hacer era verificar el contador creado por el listof
comando. Intenté usar \ifnum\value{missingthings}=0
, pero como uso el comando justo después \listoftables
, el valor del contador missingthings
es 0.0. Pensé que necesitaría verificar si el archivo test.lomt
contiene líneas de contenido.
¿Cómo haría para hacer esto? He leído temas similares aquí usando el paquete etoc
o cosas similares verificando el archivo .toc, pero eso realmente no me ayuda en mi caso, ¿verdad?
Además, ¿qué le pasa a mi ifnum
? No parece funcionar correctamente ya que \listofmissingthings
todavía se está imprimiendo incluso si se coloca al principio del documento.
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}
PD: Sé que tocloft
no se recomienda el uso de junto con las clases de KOMA-script. No he encontrado el valor para cambiar mi clase de documento, así que este es un tema para otro día.
Respuesta1
Con la ayuda de dos nuevos contadores y *.aux
un archivo auxiliar (), puede lograr una verificación del contador en el \listofmissingthings
comando para decidir si este comando generará una salida o no hará nada. Es necesario ejecutarlo dos veces para obtener resultados correctos.
Dos nuevos contadores definidos como:
\newcounter{writecn}
\newcounter{existcn}
Inicialmente todos son iguales a 0.
Luego, en la definición de \missingthing
comando, agregue:
\ifnum\value{writecn}=0\immediate\write\@auxout{\string\setcounter{existcn}{1}}\fi%
\ifnum\value{writecn}=1\else\setcounter{writecn}{1}\fi%
La primera línea escribirá inmediatamente una línea en el archivo auxiliar \setcounter{existcn}{1}
. Esto asegurará que incluso el comando \listofmissingthings
se ejecute antes que el comando \missingthing
, el contador existcn
sea igual a 1, no a 0. La segunda línea solo para establecer el contador writecn
igual a 1 cuando no es igual a 1. De esta manera, la primera línea se ejecutará sólo una vez que \missingthing
se hayan emitido incluso varios comandos.
Y luego, en la definición del comando de renovación \listofmissingthings
, use el contador existcn
para juzgar si la lista y addtocontentsline
debe incluirse en la salida. Como:
\renewcommand{\listofmissingthings}{ % Makes LoMT show up in ToC
\ifnum\value{existcn}=1
\oldlistofmissingthings%
\addcontentsline{toc}{section}{List of Missing Things}
\else\fi%%
}%
El ejemplo de trabajo completo:
\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}