定义一个带有星号参数的命令以用于 pdf 字符串(例如通过 \section)

定义一个带有星号参数的命令以用于 pdf 字符串(例如通过 \section)

我想定义一个带有可选星号参数的命令,并能够在 pdf 字符串中使用它,例如通过\section。使用下面的 MWE,我收到Token not allowed in a PDF string警告,\foo然后被删除。

我想不出一个安全的可扩展方法来替换\@ifstar以做到这一点。对于我的应用程序,默认\s@foo在 pdf 字符串内是可以的,但*如果存在,则应将其删除。

有什么方法可以实现这个吗?


\documentclass{article}

\usepackage{hyperref}

\makeatletter
  \protected\def\foo{%
    \@ifstar\s@foo\@foo
  }
  \def\@foo#1{one #1 one}
  \def\s@foo#1{two #1 two}
\makeatother

\begin{document}

\section{\foo{bar}}

\end{document}

答案1

xparse当然有了;-)

\documentclass{article}
\usepackage{xparse}
\usepackage{hyperref}
\NewExpandableDocumentCommand \foo { s m }
  {%
    \IfBooleanTF{#1}
      {one #2 one}% Starred
      {two #2 two}% Non-starred
  }
\begin{document}
\section{\foo*{bar}}
\section{\foo{baz}}
\end{document}

进入 PDF 书签的命令必须是可扩展的,因此您需要一个可扩展的机制来获取可选的。可选参数*也是如此。[...]

在上面的代码中,PDF书签是one bar onetwo baz two

相关内容