将完全展开的宏写入辅助文件

将完全展开的宏写入辅助文件

考虑以下代码片段:

\documentclass{article}
\usepackage{xparse}
% \usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\NewDocumentCommand{\edeftest}{m}{\edef\test{#1}#1}
\NewDocumentCommand{\edeftestii}{m}{\edef\testii{#1}#1}

\def\yy#1{inserted by yy -#1- inserted by yy}
\NewDocumentCommand{\zz}{m}{inserted by zz -#1- inserted by zz}
\DeclareRobustCommand{\robusttest}{robust}

\newwrite\txt
\immediate\openout\txt=\jobname.txt

\begin{document}
\edeftest{test - \yy{argument of yy}}\par
\edeftestii{test - \zz{argument of zz}}\par
\immediate\write\txt{\test}
\immediate\write\txt{\testii}
\show\test
\show\testii

\edeftest{test - \yy{argument of yy} - diacritics: á\'a - \robusttest}\par
\edeftestii{test - \zz{argument of zz} - diacritics: á\'a - \robusttest}\par
\immediate\write\txt{\test}
\immediate\write\txt{\testii}
\show\test
\show\testii

\immediate\closeout\txt
\end{document}

第一次运行\edeftest写入(我)预期的行为:\test宏定义为test - inserted by yy -argument of yy- inserted by yy,如\show\test执行时所示。第一次运行\edeftestii不扩展\zz宏;我不想要那样。

\edeftest和的第二次运行\edeftestii更糟糕。两个变音符号(á和)都以扩展语义\'a写入\test\testii宏(以及 txt 文件) ,即除非我们在前言中取消注释 T1 字体编码包,在这种情况下,两个重音“a”字符都在编码中,而不是在编码中,我猜是因为这不是 Unicode 引擎。使用和编译这些字符被视为没有问题:宏和文件都包含。这对我来说很好,但我希望有一种使用编译此行为的方法。TeX\unhbox \voidb@x (...) \accent (...)iso-8859-1UTF8pdfLaTeXXeLaTeXLuaLaTeXUTF8.txtáápdfLaTeX

最后,在第二个测试集中,健壮宏将预期但不受欢迎的\protect原语插入到.txt文件中。

我想要什么?最终目标是拥有一个txt文件,其内容尽可能接近完全展开的宏\test\testii/或用户插入到\edeftest宏中的任何参数。尽可能接近意味着最接近编译文档的文本,因此例如,如果从文件中删除一些排版更改(\bfseries, \textbf, \fontsize),那就没问题了txt。这可能吗?我知道在编写辅助文件时我们有一些限制,这就是为什么我强调“更接近”这个词。

如何\edeftest定义才能实现这一点?

我知道这个技巧\begingroup\edef{\endgroup,但在这里用不了。几年前我也问过一个相关问题 [1],在那种情况下它对我有用,但在这里却没用。

[1]写入文件 - 强大的命令会弄乱写入的文本文件

相关内容