如何在命令选项中允许使用花括号

如何在命令选项中允许使用花括号

我需要存储一个 URL 参数,&path=weigth:5|color:orange|enc:okydHa}peAXOHi@jANv@A@kJJmFAiDJuAHmDXcBb@cC`@gC^_DV}CJaCF{APaBVkBdAyEf@qC`@{B\aDSwB以便稍后重新编码utf8并传递给 lua 脚本。

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{xkeyval}
\makeatletter
\define@key{testcmd}{arg}[]%
{%
  \gdef\testcmdarg{\detokenize{#1}}%
}%
\newcommand*\testcmd[1][]{\setkeys{testcmd}{#1}}%
\makeatother
\begin{document}
\testcmd[arg={&path=weight:5|color:orange|enc:}]
%\testcmd[arg=&path=weight:5|color:orange|enc:okydHa}peAXOHi@jANv@A@kJJmFAiDJuAHmDXcBb@cC`@gC^_DV}CJaCF{APaBVkBdAyEf@qC`@{B\aDSwB]
Test: \testcmdarg
% in fact, the option is reencoded to utf8 and passed to a lua script! no output!
\end{document}

大部分问题都用 解决了\detokenize,但花括号还是有问题。我猜这与 catcodes 有关。那么我该如何更改 catcodes 并将更改限制在选项的设置上呢?

或者是否有其他方法将选项存储为“文本”?

答案1

目前尚不清楚您所说的“重新编码为 UTF-8 并传递给 Lua 脚本”是什么意思,但问题似乎很清楚:您正在存储\detokenize它,而不是执行它。

\define@key{testcmd}{arg}[]{%
  \xdef\testcmdarg{\detokenize{#1}}%
}

随着\xdef替换文本的扩展,在这种情况下\detokenize,宏将执行其任务并且包含所有类别代码 12 个字符。

相关内容