La hiperreferencia del paquete entra en conflicto con el título de la sección interior del contador

La hiperreferencia del paquete entra en conflicto con el título de la sección interior del contador

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 \projcausa 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 hyperrefproporciona \texorpdfstringo \pdfstringdefDisableCommandspara manejar comandos que deben redefinirse o filtrarse dentro de los marcadores:

\section{Project\texorpdfstring{\protect\proj}{\theprojno}}

O \projse puede dar a conocer el hyperrefcódigo del marcador:

...
\usepackage{hyperref}
\pdfstringdefDisableCommands{\let\proj\theprojno}
...
\begin{document}
...
\section{Project\protect\proj}

Consejos:

  • Si definió \projcon \DeclareRobustCommand, entonces \protectno se necesita un explícito cuando se usa proj:

    \newcommand*{\proj}{}% check, whether \proj is undefined
    \DeclareRobustCommand*{\proj}{\stepcounter{projno}}
    
  • Pista importante de egreg ensu comentario: \stepcounterdeberí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).

información relacionada