
Eu defini uma lista personalizada chamada "Lista de coisas que faltam" usando o pacote tocloft
. A lista contém alguns itens e o listof
comando me fornece a respectiva lista. Essencialmente, esta lista só deve aparecer se contiver itens. Caso contrário, gostaria que não imprimisse nada. Eu gostaria de usar isso para marcar coisas que ainda preciso adicionar em minha tese, mas não remover mais nada do código depois que todas as coisas que faltam forem resolvidas de uma forma ou de outra.
O que eu gostaria é usar o mínimo possível de pacotes adicionais, por questões de compatibilidade. Já coloquei isso em .sty
forma e ainda estou pensando em carregá-lo em algum momento, se for útil.
Então o que eupensamentoO que eu precisava fazer era verificar o contador criado pelo listof
comando. Tentei usar \ifnum\value{missingthings}=0
, mas como utilizo o comando logo no after \listoftables
, o valor do contador missingthings
é 0,0. Achei que precisaria verificar se o arquivo test.lomt
contém alguma linha de conteúdo.
Como eu faria isso? Eu li tópicos semelhantes aqui usando o pacote etoc
ou coisas semelhantes verificando o arquivo .toc, mas isso realmente não me ajuda no meu caso, não é?
Além disso, o que há de errado com o meu ifnum
? Parece não funcionar corretamente, pois \listofmissingthings
ainda está sendo impresso, mesmo se colocado no início do 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}
PS: Eu sei que o uso de tocloft
não é recomendado junto com classes de script KOMA. Não tive coragem de mudar minha classe de documentos, então esse é um assunto para outro dia.
Responder1
Com a ajuda de dois novos contadores e *.aux
um arquivo auxiliar (), você pode conseguir uma verificação do contador no \listofmissingthings
comando para decidir se este comando produzirá uma saída ou não fará nada. Você precisa executar duas vezes para obter resultados corretos.
Dois novos contadores definidos como:
\newcounter{writecn}
\newcounter{existcn}
Inicialmente, eles são todos iguais a 0.
Então, na definição do \missingthing
comando, adicione:
\ifnum\value{writecn}=0\immediate\write\@auxout{\string\setcounter{existcn}{1}}\fi%
\ifnum\value{writecn}=1\else\setcounter{writecn}{1}\fi%
A primeira linha escreverá imediatamente uma linha no arquivo aux \setcounter{existcn}{1}
. Isso garantirá que mesmo o comando \listofmissingthings
seja executado antes do comando \missingthing
, os contadores existcn
sejam iguais a 1 e não 0. A segunda linha apenas para definir o contador writecn
igual a 1 quando não for igual a 1. Desta forma, a primeira linha será executada apenas uma vez que vários \missingthing
comandos tenham sido emitidos.
E então, na definição de comando de renovação \listofmissingthings
, use o contador existcn
para julgar se a lista addtocontentsline
deve ser incluída na saída. Como:
\renewcommand{\listofmissingthings}{ % Makes LoMT show up in ToC
\ifnum\value{existcn}=1
\oldlistofmissingthings%
\addcontentsline{toc}{section}{List of Missing Things}
\else\fi%%
}%
O exemplo de trabalho 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}