我想通过传递一个存储图片名称的变量来导入图片,而不是存储图片名称本身。以下是示例代码
\documentclass{article}
\usepackage[margin=0.7in]{geometry}
\usepackage[parfill]{parskip}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\usepackage{tikz}
\begin{document}
\ExplSyntaxOn
\newcommand{\varpicture}{
\tl_new:N \l_img_name_tl
\tl_set:Nn \l_img_name_tl {uniquename.png}
\node (p) at (0,0) {
\includegraphics[width=100pt]{uniquename.png} %works
\includegraphics[width=100pt]{\tl_use:N \l_img_name_tl} %doesn't work
};
}
\ExplSyntaxOff
\begin{tikzpicture}
\varpicture
\end{tikzpicture}
\end{document}
我发现的有关此问题的唯一资源是这里:如何在 LaTeX3 中使用 \includegraphics 和 \attachfile 变量
如果我尝试将文件重命名为:“uniquename”而不是“uniquename.png”,我会得到相同的错误,即无法找到该文件。其他线程中使用的解决方案对我都不起作用。
我使用“pdflatex”编译 TeX 代码。
答案1
文件名开头的宏将被扩展一次在\includegraphics
(如所述@HeikoOberdiek)。
变量tl
可以期望在一个扩展步骤中扩展到其内容,因此您可以删除开头的\tl_use:N
(这需要多个步骤)并直接使用\l_img_name_tl
。在最近的安装中,变体为\tl_use:N
也可以正常工作(正如所提到的@UlrikeFischer)
\documentclass{article}
\usepackage[margin=0.7in]{geometry}
\usepackage[parfill]{parskip}
\usepackage[utf8]{inputenc}
\usepackage{xparse}
\usepackage{tikz}
\begin{document}
\ExplSyntaxOn
\tl_new:N \l_img_name_tl
\newcommand{\varpicture}{
\tl_set:Nn \l_img_name_tl {example-image-duck.pdf}
\node (p) at (0,0) {
\includegraphics[width=100pt]{example-image-duck.pdf} %works
\includegraphics[width=100pt]{\l_img_name_tl}
};
}
\ExplSyntaxOff
\begin{tikzpicture}
\varpicture
\end{tikzpicture}
\end{document}