问题陈述

问题陈述

问题陈述

当我尝试将命令应用于从包中的表\MakeUppercase中检索其值的宏时,出现编译错误。.csv\DTLfetchdatatool

我正在寻找解决这个问题的解决方案。

最小(非)工作示例(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}

相关内容