
O seguinte documento mínimo
\documentclass{article}
\usepackage{hyperref}
\newcounter{projno}
\newcommand{\proj}{%
\stepcounter{projno}%
\theprojno}
\begin{document}
\section{Project \protect\proj }
\end{document}
produz o erro
! Missing \endcsname inserted.
<to be read again>
\csname\endcsname
l.14 \section{Project \protect\proj }
O erro desaparece quando eu comento \usepackage{hyper ref}
. Alguém vê uma saída para esse dilema?
Responder1
A macro \proj
causa problemas nos favoritos. A maior parte da maquinaria estomacal do TeX não funciona aqui. Comandos expansíveis funcionam bem em marcadores, mas atribuições (incrementos de contador, ...) não. O pacote hyperref
fornece \texorpdfstring
ou \pdfstringdefDisableCommands
para lidar com comandos que devem ser redefinidos ou filtrados dentro dos marcadores:
\section{Project\texorpdfstring{\protect\proj}{\theprojno}}
Ou \proj
pode ser divulgado o hyperref
código do marcador de:
...
\usepackage{hyperref}
\pdfstringdefDisableCommands{\let\proj\theprojno}
...
\begin{document}
...
\section{Project\protect\proj}
Dicas:
Se você definiu
\proj
com\DeclareRobustCommand
, então um explícito\protect
não será necessário ao usarproj
:\newcommand*{\proj}{}% check, whether \proj is undefined \DeclareRobustCommand*{\proj}{\stepcounter{projno}}
Dica importante de egreg emo comentário dele:
\stepcounter
deveria ser melhor utilizadoantes\section
. Caso contrário, o contador também será incrementado pela entrada no índice e nas linhas de cabeçalho (dependendo do estilo da página).