这是我的代码:
\documentclass{article}
\usepackage{polyglossia}
\usepackage[useui]{eforms}
\newcommand{\myvalue}[1][]{Testvalue #1}
\begin{document}
\textField[\ui{value={\myvalue[foo]}}]{Text}{2em}{1em}
\end{document}
当我尝试编译它时,我得到:
Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref) removing `\myvalue' on input line 9.
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/se-ascii-print.def)
! Undefined control sequence.
\in@ #1#2->\begingroup \def \in@@
##1#1{}\toks@ \expandafter {\in@@ #2{}{}#1...
l.9 ...\ui{value={\myvalue[foo]}}]{Text}{2em}{1em}
即使我没有设置可选参数,也会发生这种情况。当我从宏中删除该参数或将其设为必需参数时,错误就会消失。为什么?我如何在这里使用带有可选参数的宏?
答案1
你不能。该值被转换为 PDF 字符串,而不是由 TeX 排版。因此,在转换过程中 TeX 的胃口不可用。这意味着,分配、定义、不可扩展的宏将不起作用,甚至可能中断。\futurelet
在 LaTeX 中,对可选参数的扫描是通过分配实现的。因此,\futurelet
将作为垃圾逐字写入 PDF 字符串,因为 PDF 查看器不知道 TeX 命令。而应该由 定义的宏\futurelet
未定义,导致接下来的扩展步骤出现问题。
您已经找到了一种解决方法,即使用必需参数而不是可选参数。