使用 \readrecordarray 与宏参数

使用 \readrecordarray 与宏参数

我正在尝试使用readarray包裹使用命令加载多个多行文件\readrecordarray以供下一步处理。由于要处理多个文件,\readrecordarray命令中使用了名为宏的名称来将值存储为参数。因此,\readrecordarray{file.in}\someNewMacro我需要使用\csname某种方式来定义宏“ \csname #1\endcsname”来存储所有值。从包源中我了解到,\readrecordarray对于第二个参数,例如\someNewMacro试图切断第一个符号“ \”并定义相应的宏,但仍然无法以正确的方式进行。\LetLtxMacro从临时宏中复制也无济于事,因为该临时宏会被每个新文件覆盖。

有没有办法使用\readrecordarray宏参数(例如#1)(根据下面的源代码)?谢谢!

\newcommand\readrecordarray[2]{%
\edef\@arrayident{\rdar@macroname#2}%
\def\ra@TermA{\@readdef{#1}}%
\def\ra@TermB{\expandafter\ra@TermA\csname\@arrayident def\endcsname}%
\expandafter\ra@TermB\expandafter{\@arrayident}%
}
\def\rdar@macroname{\expandafter\@gobble\string}

答案1

不太清楚您请求的是什么。但是,如果我理解了要点,您需要将\readrecordarray文件内容解析到数组中,并通过变量指定\csname

在下面的 MWE 中,我展示了以标准方式指定数组的过程,然后我再次展示了通过 cs 规范指定数组的过程。在这两种情况下,都会读取文件并将第 3 个数组元素(文件的第 3 行)解析为输出。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{readarray}
\begin{document}
Note: junk.tex is the name of this source code file.

\readrecordarray{junk.tex}\arrayA
\arraytomacro\arrayA[3]\tmp
\detokenize\expandafter{\tmp}

\def\snippet{\readrecordarray{junk.tex}}
\expandafter\snippet\csname arrayB\endcsname
\arraytomacro\arrayB[3]\tmp
\detokenize\expandafter{\tmp}
\end{document}

在此处输入图片描述

相关内容