如果将图片作为变量传递,则 \includegraphics 找不到图片

如果将图片作为变量传递,则 \includegraphics 找不到图片

我想通过传递一个存储图片名称的变量来导入图片,而不是存储图片名称本身。以下是示例代码

\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}

在此处输入图片描述

相关内容