Tocloft verifica se a lista personalizada está vazia

Tocloft verifica se a lista personalizada está vazia

Eu defini uma lista personalizada chamada "Lista de coisas que faltam" usando o pacote tocloft. A lista contém alguns itens e o listofcomando 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 .styforma 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 listofcomando. 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.lomtcontém alguma linha de conteúdo.

Como eu faria isso? Eu li tópicos semelhantes aqui usando o pacote etocou 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 \listofmissingthingsainda 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 tocloftnã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 *.auxum arquivo auxiliar (), você pode conseguir uma verificação do contador no \listofmissingthingscomando 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 \missingthingcomando, 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 \listofmissingthingsseja executado antes do comando \missingthing, os contadores existcnsejam iguais a 1 e não 0. A segunda linha apenas para definir o contador writecnigual a 1 quando não for igual a 1. Desta forma, a primeira linha será executada apenas uma vez que vários \missingthingcomandos tenham sido emitidos.

E então, na definição de comando de renovação \listofmissingthings, use o contador existcnpara julgar se a lista addtocontentslinedeve 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}

informação relacionada