
패키지를 사용하여 "누락된 항목 목록"이라는 사용자 정의 목록을 정의했습니다 tocloft
. 목록에는 몇 가지 항목이 포함되어 있으며 listof
명령은 해당 목록을 제공합니다. 기본적으로 이 목록은 항목이 포함된 경우에만 표시되어야 합니다. 그렇지 않으면 아무 것도 인쇄하지 않기를 바랍니다. 나는 이것을 사용하여 논문에 추가해야 할 항목을 표시하고 싶지만 모든 누락된 항목이 어떤 식으로든 해결되면 코드에서 다른 항목을 제거하지 않습니다.
내가 원하는 것은 호환성을 위해 가능한 한 적은 추가 패키지를 사용하는 것입니다. 이미 이것을 형식으로 만들어 놓았는데 .sty
, 유용하다고 판단되면 언젠가 업로드하는 것을 고려하고 있습니다.
그래서 나는 무엇을생각내가 해야 할 일은 listof
명령으로 생성된 카운터를 확인하는 것이었습니다. 를 사용하려고 했는데 \ifnum\value{missingthings}=0
바로 뒤에 명령어를 사용하기 때문에 \listoftables
카운터 값이 missingthings
0.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
카운터는 existcn
0이 아닌 1과 같습니다. 두 번째 줄은 카운터가 writecn
1이 아닐 때 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}