使用 unicode 名称定义“命令”或“宏”

使用 unicode 名称定义“命令”或“宏”

我如何实现大致等效的功能\def\macro{expansion},以便宏名称可以包含空格和其他 Unicode 字符?例如,我希望能够执行以下操作:

\defineinsert{qty: β2 activity}{\SI{1.85}{\mega\becquerel}}
[...]
The measured activity was \insert{qty: β2 activity}.
$R_\beta = \insert{qty: β2 activity}$

生产

The measured activity was \SI{1.85}{\mega\becquerel}.
$R_\beta = \SI{1.85}{\mega\becquerel}$

其动机是能够预先定义在整个文档中使用许多有序的“宏”,而不受字符只能是的限制[a-zA-Z],就像使用来\def定义实际命令所施加的限制一样。


我不知道如何实现这一点,因为我不知道如何用 TeX 创建键值映射……或者这是否是正确的方法。

也许还有其他方法可以满足这一需求?我应该开始使用 LuaTeX 来实现这一点吗?(我目前正在使用 XeLaTeX。)也许存在一个这样的包?

谢谢!

答案1

你可以使用\csname ...\endcsname它。例如借助 \@namedef:

\documentclass{article}
\begin{document}
\makeatletter
\@namedef{\detokenize{qty: β2 activity}}{bllb}

The beta activity \@nameuse{\detokenize{qty: β2 activity}}

The beta activity \@nameuse{\detokenize{qty: β2  activity}}

\end{document}

为了简洁起见,你可以定义类似

\makeatletter
\newcommand\newshortcut[2]{\@namedef{\detokenize{#1}}{#2}}
\newcommand\shortcut[1]{\@nameuse{\detokenize{#1}}}
\makeatother

可以像这样使用:

\newshortcut{qty: β}{lola}
[...]
Hello \shortcut{qty: β}.

相关内容