我使用 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