![是否有一个命令、宏或工具可以以易于使用的方式获取任何宏的字符串结果(如在其他语言中一样)?](https://linux22.com/image/401593/%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E3%80%81%E5%AE%8F%E6%88%96%E5%B7%A5%E5%85%B7%E5%8F%AF%E4%BB%A5%E4%BB%A5%E6%98%93%E4%BA%8E%E4%BD%BF%E7%94%A8%E7%9A%84%E6%96%B9%E5%BC%8F%E8%8E%B7%E5%8F%96%E4%BB%BB%E4%BD%95%E5%AE%8F%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%BB%93%E6%9E%9C%EF%BC%88%E5%A6%82%E5%9C%A8%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E4%B8%AD%E4%B8%80%E6%A0%B7%EF%BC%89%EF%BC%9F.png)
我不想深入研究可扩展和不可扩展的问题。我怀疑几周后我是否能理解我自己开发的设计。因此,我正在寻找一种通用且易于使用的解决方案。
有这样的事吗?
我认为在 TeX 的深处一定存在这样一个点,每个宏在创建字符串时都必须了解这些字符串 - 最终,字母将被排版!
问题是,你怎样才能连接到这一点?
答案1
正如评论中所解释的那样,TeX 不了解字符串,而只了解可扩展和可执行的宏和基元。当 TeX 处理其输入时,它会开始尽可能地扩展标记,以找到具有其参数或输出字符的不可扩展命令。然后,如果它们是命令,它就开始执行它们,如果它们是字符,则将它们添加到构建的页面中。
目前还不清楚您要寻找什么样的结果或要用它做什么。但从上面的评论来看,您似乎只是在寻找某个标记列表的完整扩展版本,即一系列仅产生可打印字符而中间没有任何不可扩展命令的标记。如果是这种情况,您可以使用\edef\mystring{<tokens>}
完全扩展标记列表<tokens>
并将结果“字符串”存储在宏中\mystring
:
\def\a{a}
\def\b{\a b}
\def\c{\b-\b-\b c}
\edef\mystring{\c}
\show\mystring
将打印
> \mystring=macro:
->ab-ab-abc.
在终端上。根据您要对该结果执行的操作,您必须使用进一步的扩展方法来“解包”宏。