我正在尝试使用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}