我想定义一个带有可选星号参数的命令,并能够在 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 one
和two baz two
。