Cómo utilizar \newrobustcmd y \NewDocumentCommand con hyperref en los títulos de las secciones

Cómo utilizar \newrobustcmd y \NewDocumentCommand con hyperref en los títulos de las secciones

¿Cómo se puede \newrobustcmdutilizar NewDocumentCommanden títulos de sección con hyperrefhabilitado? El MWE a continuación muestra que, si bien el PDF renderizado parece correcto, los marcadores no muestran el contenido de la macro.

\documentclass[11pt]{article}

\usepackage{hyperref}
\usepackage{xparse}
\usepackage{etoolbox}

\newcommand{\testA}[0]{world}
\newrobustcmd{\testB}[0]{world}
\NewDocumentCommand{\testC}{}{world}

\begin{document}
    \section{Hello \testA}
    \section{Hello \testB}
    \section{Hello \testC}
\end{document}

pdf resultante

El MWE.outarchivo tiene el siguiente aspecto.

\BOOKMARK [1][-]{section.1}{Hello world}{}% 1
\BOOKMARK [1][-]{section.2}{Hello }{}% 2
\BOOKMARK [1][-]{section.3}{Hello }{}% 3

Respuesta1

Con \newcommanddefine una macro expandible ( \def) mientras que con \newrobustcmdy \NewDocumentCommanddefine una macro protegida por motor ( \protected\def). El contenido de los marcadores se expande mientras se crean las cadenas de marcadores, pero las macros protegidas no se pueden expandir, por lo que los tokens \testBy \testCen su MWE terminan como están en los marcadores. hyperrefno sabe qué hacer con ellos por lo que los descarta.

Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\testB' on input line 13.


Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\testC' on input line 14.

Entonces, si realmente necesitas macros protegidas, tienes dos opciones:

  • utilizar \section{Hello \texorpdfstring{\testB}{world}}en el documento o
  • agregue definiciones expandibles más simples en el preámbulo después de la carga hyperrefque se usarán en los marcadores

    \pdfstringdefDisableCommands{%
      \def\testB{world}%
      \def\testC{wor‌​ld}%
    }
    

información relacionada