我需要存储一个 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 个字符。