从文件读取路径到 \includepgraphics

从文件读取路径到 \includepgraphics

我正在尝试自动为存储在 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

相关内容