
El siguiente documento mínimo
\documentclass{article}
\usepackage{hyperref}
\newcounter{projno}
\newcommand{\proj}{%
\stepcounter{projno}%
\theprojno}
\begin{document}
\section{Project \protect\proj }
\end{document}
produce el error
! Missing \endcsname inserted.
<to be read again>
\csname\endcsname
l.14 \section{Project \protect\proj }
El error desaparece cuando comento \usepackage{hyper ref}
. ¿Alguien ve una salida a este dilema?
Respuesta1
La macro \proj
causa problemas en los marcadores. La mayor parte de la maquinaria estomacal de TeX no funciona aquí. Los comandos expandibles funcionan bien en los marcadores, pero las asignaciones (incrementos de contador,...) no. El paquete hyperref
proporciona \texorpdfstring
o \pdfstringdefDisableCommands
para manejar comandos que deben redefinirse o filtrarse dentro de los marcadores:
\section{Project\texorpdfstring{\protect\proj}{\theprojno}}
O \proj
se puede dar a conocer el hyperref
código del marcador:
...
\usepackage{hyperref}
\pdfstringdefDisableCommands{\let\proj\theprojno}
...
\begin{document}
...
\section{Project\protect\proj}
Consejos:
Si definió
\proj
con\DeclareRobustCommand
, entonces\protect
no se necesita un explícito cuando se usaproj
:\newcommand*{\proj}{}% check, whether \proj is undefined \DeclareRobustCommand*{\proj}{\stepcounter{projno}}
Pista importante de egreg ensu comentario:
\stepcounter
debería usarse mejorantes\section
. De lo contrario, el contador también se incrementa con la entrada en el índice y las líneas de encabezado (dependiendo del estilo de la página).