
나는 매우 간단한 튜토리얼을 따라 자신만의 listof
. 링크는https://texblog.org/2008/07/13/define-your-own-list-of/
훌륭하게 작동했습니다. 선택적 매개변수를 추가하고 싶었습니다. 이 옵션이 제공되면 사용자 정의 ToC에 이 옵션 매개변수가 전송됩니다. 하지만 이해할 수 없는 오류가 발생합니다.
\usepackage{tocloft}
...
\newcommand{\listTMname}{List of TMs}
\newlistof{TM}{tms}{\listTMname}
\newcommand{\TM}[2][]{%
\refstepcounter{TM}
\par\noindent\textbf{TM \theTM. #2}
\addcontentsline{tms}{TM}{\protect\numberline{\theTM}\ifthenelse{\equal{#1}{}}{#2}{#1}%
}\par}
나는 그것을 다음과 같이 사용하고 싶었습니다. \TM{To text and ToC}
그러나 \TM[to ToC]{To text}
94번 라인에서 호출하는 동안 오류가 발생했습니다.
\reserved@al94 \TM{Test...} 정의에 잘못된 매개변수 번호가 있습니다.
내가 뭘 잘못했나요? 명령 에서 \addcontentsline...
ifthenelse를 제거하고 위의 두 줄에 넣으면 \textbf
작동하지만 반대 방향으로는 작동하지 않습니다.
답변1
명령은 \ifthenelse
취약하며 전체 구성도 마찬가지입니다.
\ifthenelse{\equal{#1}{}}{#2}{#1}
다음과 같은 확장 가능한 테스트를 사용하세요.
\newcommand{\TM}[2][]{%
\par\noindent
\refstepcounter{TM}% <--- don't forget %
\addcontentsline{tms}{TM}{%
\protect\numberline{\theTM}%
\if\relax\detokenize{#1}\relax#2\else#1\fi
}%
\textbf{TM \theTM. #2}% <--- don't forget %
\par\nopagebreak
}
또는 다음을 사용하여 \usepackage{xparse}
:
\NewDocumentCommand{\TM}{om}{%
\par\noindent
\refstepcounter{TM}% <--- don't forget %
\addcontentsline{tms}{TM}{\protect\numberline{\theTM}\IfNoValueTF{#1}{#2}{#1}}%
\textbf{TM \theTM. #2}% <--- don't forget %
\par\nopagebreak
}
앵커( 를 사용하는 경우 hyperref
)를 올바른 위치에 배치하기 위해 다양한 항목의 위치를 변경했습니다.