Tocloft는 사용자 정의 목록이 비어 있는지 확인합니다.

Tocloft는 사용자 정의 목록이 비어 있는지 확인합니다.

패키지를 사용하여 "누락된 항목 목록"이라는 사용자 정의 목록을 정의했습니다 tocloft. 목록에는 몇 가지 항목이 포함되어 있으며 listof명령은 해당 목록을 제공합니다. 기본적으로 이 목록은 항목이 포함된 경우에만 표시되어야 합니다. 그렇지 않으면 아무 것도 인쇄하지 않기를 바랍니다. 나는 이것을 사용하여 논문에 추가해야 할 항목을 표시하고 싶지만 모든 누락된 항목이 어떤 식으로든 해결되면 코드에서 다른 항목을 제거하지 않습니다.

내가 원하는 것은 호환성을 위해 가능한 한 적은 추가 패키지를 사용하는 것입니다. 이미 이것을 형식으로 만들어 놓았는데 .sty, 유용하다고 판단되면 언젠가 업로드하는 것을 고려하고 있습니다.

그래서 나는 무엇을생각내가 해야 할 일은 listof명령으로 생성된 카운터를 확인하는 것이었습니다. 를 사용하려고 했는데 \ifnum\value{missingthings}=0바로 뒤에 명령어를 사용하기 때문에 \listoftables카운터 값이 missingthings0.0이 됩니다. 파일에 test.lomt내용 줄이 포함되어 있는지 확인해야 한다고 생각했습니다 .

이 일을 어떻게 해야 할까요? 패키지를 사용하거나 .toc 파일을 확인하는 유사한 항목을 사용하여 여기에서 유사한 주제를 읽었지만 etoc제 경우에는 실제로 도움이 되지 않습니다. 그렇죠?

게다가 내 에는 무슨 문제가 있는 걸까요 ifnum? \listofmissingthings문서 시작 부분에 배치해도 계속 인쇄되므로 제대로 작동하지 않는 것 같습니다 .

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}

tocloft추신: KOMA 스크립트 클래스와 함께 사용하는 것이 권장되지 않는다는 것을 알고 있습니다 . 문서 클래스를 변경할 용기가 없어서 이것은 다른 날의 주제입니다.

답변1

두 개의 새로운 카운터와 보조( ) 파일을 사용하면 명령 *.aux에서 카운터 검사를 수행하여 \listofmissingthings이 명령이 출력을 할지 아니면 아무 작업도 수행하지 않을지 결정할 수 있습니다. 올바른 출력을 얻으려면 두 번 실행해야 합니다.

두 개의 새로운 카운터는 다음과 같이 정의됩니다.

\newcounter{writecn}
\newcounter{existcn}

처음에는 모두 0과 같습니다.

그런 다음 명령 정의에 \missingthing다음을 추가합니다.

\ifnum\value{writecn}=0\immediate\write\@auxout{\string\setcounter{existcn}{1}}\fi%
\ifnum\value{writecn}=1\else\setcounter{writecn}{1}\fi%

첫 번째 줄은 즉시 aux file 에 줄을 씁니다 \setcounter{existcn}{1}. 이렇게 하면 명령이 \listofmissingthings명령 전에 실행 되더라도 \missingthing카운터는 existcn0이 아닌 1과 같습니다. 두 번째 줄은 카운터가 writecn1이 아닐 때 1로 설정하기 위한 것입니다. 이런 식으로 첫 번째 줄이 실행됩니다. 여러 \missingthing명령이 실행된 경우에도 한 번만 실행됩니다.

그런 다음 의 renewcommand 정의에서 \listofmissingthings카운터를 사용하여 existcn목록 및 가 addtocontentsline출력에 포함되어야 하는지 판단합니다. 좋다:

\renewcommand{\listofmissingthings}{ % Makes LoMT show up in ToC
    \ifnum\value{existcn}=1
    \oldlistofmissingthings%
    \addcontentsline{toc}{section}{List of Missing Things}
    \else\fi%%
}%

전체 작업 예:

\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}

관련 정보