如何扩展宏以便将其用作另一个宏的输入

如何扩展宏以便将其用作另一个宏的输入

我使用 datatool 将数据文件中的键值对导入数据库。然后我使用自定义命令检索值\varConfig{}

其中一个值是数字 1,作为字符串保存在数据文件中。

\varConfig{}如果我在文档正文中使用该命令,我的命令将给我数字“1”作为字符串。

我想使用该数字作为另一个生成文件路径的命令的输入。目前我正在对其进行硬编码。

\input{\reviewfile{1}{conclusions.tex}}

但只需用命令替换 1 \varConfig{},就像这样......

\input{\reviewfile{\varConfig{report-number}}{conclusions.tex}}

... 给出了错误

illegal parameter number in definition of \reviewfle

我该如何避免这个错误?我猜它与扩展有某种关系,但我不知道在这种情况下如何正确使用 \expandafter。

编辑:我已尝试过解决方案将 \input 命令的内容传递给宏, 例如

\expandafter\input\expandafter{\reviewfile{\varConfig{report-number}}{conclusions.tex}}

但这只会给我带来更多错误。

编辑:MWE

\documentclass[9pt,notitlepage]{article}

\RequirePackage{datatool}
\DTLsetseparator{:}% Set the separator between the columns.

% import data from test.csv into a database called 'config'
\DTLloaddb[noheader, keys={key,value}]{config}{config.csv}

\newcommand{\varConfig}[1]{% 
\DTLgetvalueforkey{\scratchmacro}{value}{config}{key}{#1}%
\DTLifnull{\scratchmacro}{\textbf{ERROR!} key #1 is undefined.}{\scratchmacro}%
}%

% create new command
\newcommand{\reviewfile}[2]{#1/#2}

\begin{document}

\varConfig{block-text}

\begin{table}[!htbp]
    \caption{\protect\varConfig{short-text}}
    \begin{tabular}{lr}
        Name:         & \varConfig{block-text}                                \\
    \end{tabular}
\end{table}

\varConfig{report-number}

\input{\reviewfile{1}{test.tex}}

%\input{\reviewfile{\varConfig{report-number}}{test.tex}}


\end{document}

数据config.csv如下:

short-text: "hello world" 
block-text: "this is some long text to see what happens"
report-number: 1

然后我有文件 1/test.tex,它是一个包含文本的虚拟文件:

THIS IS A TEST

输出应如下所示: 如果它有效

相关内容