
Eu segui um tutorial muito simples para criar o próprio arquivo listof
. O link éhttps://texblog.org/2008/07/13/define-your-own-list-of/
Funcionou muito bem, eu só queria adicionar um parâmetro opcional. Se este opcional for fornecido, para o ToC personalizado ele enviará este parâmetro opcional. Mas recebo um erro que não entendo.
\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}
Eu queria usá-lo da seguinte maneira: \TM{To text and ToC}
e \TM[to ToC]{To text}
mas recebo um erro ao chamar na linha 94:
Número de parâmetro ilegal na definição de \reserved@al94 \TM{Test...}
O que eu fiz de errado? Se no \addcontentsline...
comando eu removo o ifthenelse e coloco na \textbf
2 linha acima ele funciona, mas não no sentido oposto.
Responder1
O comando \ifthenelse
é frágil e toda a construção também
\ifthenelse{\equal{#1}{}}{#2}{#1}
Use um teste expansível, como
\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
}
Alternativamente, com \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
}
Mudei a posição dos diversos itens para colocar a âncora (caso você use hyperref
) no lugar certo.