问题陈述
当我尝试将命令应用于从包中的表\MakeUppercase
中检索其值的宏时,出现编译错误。.csv
\DTLfetch
datatool
我正在寻找解决这个问题的解决方案。
最小(非)工作示例(MWE)
\documentclass{article}
\usepackage{datatool}
\DTLloaddb{data}{data.csv}
\def\myvariable{\DTLfetch{data}{Key}{Variable}{Value}}%
\begin{document}
\myvariable\\% This works as expected
\MakeUppercase{\myvariable}% TODO: This breaks compilation
\end{document}
包括data.csv
:
Key,Value
Variable,1f.45
编译时收到错误
尝试编译上述示例会导致以下错误:
! Illegal parameter number in definition of \reserved@a.
<to be read again>
3
l.11 \MakeUppercase{\myvariable}
答案1
\DTLfetch
是不可扩展的,所以它不能在 的参数中起作用\MakeUppercase
,即使隐藏在 里面\myvariable
。
相反,您可以使用\DTLgetvalueforkey
将值分配给\myvariable
,然后\myvariable
包含实际值而不是命令,\DTLfetch
并且可以在内部使用\MakeUppercase
:
\documentclass{article}
\usepackage{datatool}
\DTLloaddb{data}{data.csv}
\DTLgetvalueforkey\myvariable{Value}{data}{Key}{Variable}
\begin{document}
\myvariable\\% This works as expected
\MakeUppercase{\myvariable}% This works too.
\end{document}