我正在尝试自动为存储在 csv 中的一系列变量创建报告。我也想对图片这样做,所以我的想法是将路径存储在变量中,然后简单地使用\includegraphics{\var{img_path}}
。但看起来 includegraphics 将其视为\var{img_path}
字符串,实际上文本变成了绿色。
这是我用来创建变量的代码:
\usepackage{datatool}
\DTLsetseparator{:}
\DTLloaddb[noheader, keys={key,value}]{data}{report_data.csv}
\newcommand{\var}[1]{\DTLfetch{data}{key}{#1}{value}}
这是用于显示图片的代码,我添加了它,\ExplSyntaxOn
因为我在其他帖子上读到了它,但仍然不起作用。
\ExplSyntaxOn
\begin{figure}[h]
\centering
\includegraphics{resources/images/imagen1.jpg}
\caption{\var{imagen2}}
\label{fig:image_name}
\end{figure}
\ExplSyntaxOff
有趣的是,标题的效果正如预期的那样:Figure 1: resources/images/image2.jpg
我是 LaTex 的新手,需要注意的其他事项\var{}
是,定义在main.txt
,我试图显示图片的位置sections/section1
,资源文件夹在根目录,是的,我也尝试过使用../resources/images/image2.jpg
。
提前致谢
答案1
如果没有 ,将你的 放在\var{key}
中将\caption
无法工作\protect
,但在里面使用它\includegraphics
应该可以工作。 原因可能与\DTLfetch
包 中的实现有关datatool
。
替换\DTLfetch
为\DTLgetvalueforkey
似乎可以解决问题。后者与前者类似,只是它将命令设置为获取的值(请参阅文档的包裹datatool
)。
我不确定您想做什么,但以下 MWE 展示了如何从数据库读取文件名并将其传递给\includegraphics
和\caption
。
\documentclass{article}
\usepackage{graphicx}
\usepackage{datatool}
\DTLsetseparator{:}
\DTLloaddb[noheader,keys={key,value}]{data}{database.csv}
\newcommand{\showfile}[1]{%
\DTLgetvalueforkey{\filename}{value}{data}{key}{#1}%
\begin{figure}
\centering
\includegraphics{\filename}
\caption{This is file \protect\filename.}
\end{figure}%
}
\begin{document}
\showfile{example}
%\showfile{imagen1} % requires resource/images/imagen1.jpg
%\showfile{imagen2} % requires resource/images/imagen1.jpg
\end{document}
其中的内容为database.csv
:
example:example-image.png
imagen1:resources/images/imagen1.jpg
imagen2:resources/images/imagen2.jpg