我想要创建一个函数,它可以插入图像并附加文件(例如,有关绘图的数据),所以我需要为图像名称设置一个变量,它将用于附加文件。(\attachfile
来自attachfile2
包。)
但是现在我不知道如何在 LaTeX3 中使用变量 for \includegraphics
and 。\attachfile
(我忽略了\ExplSyntaxOn
下面\ExplSyntaxOff
代码中的。)
问题 1:\includegraphics
LaTeX2e 的变量很好。
\def\imgname{img.eps}
\includegraphics{\imgname}
但 LaTeX3 失败了:
\tl_new:N \l_img_name_tl
\tl_set:Nn \l_img_name_tl {example-image.eps}
\includegraphics{\tl_use:N \l_img_name_tl}
仅当我使用“example-image”(无扩展名)时才成功,但我想保留扩展名以选择具有相同名称的不同文件(img.eps,img.png,...),因此我尝试了另一个扩展名变量但也失败了。
\tl_new:N \l_img_name_tl
\tl_set:Nn \l_img_name_tl {example-image}
\tl_new:N \l_ext_name_tl
\tl_set:Nn \l_ext_name_tl {eps}
\includegraphics{\tl_use:N \l_img_name_tl . \tl_use:N \l_ext_name_tl}
(更新:我发现上述代码仅在 eps 中失败,在 pdf、png、jpg 中运行良好。并且\tl_use:N
可能不是必需的,我不确定。)
问题2:\attachfile
LaTeX2e 也失败了:
\def\fname{test.txt}
\attachfile{\fname}
看起来\attachfile
不会扩展任何宏。所以我定义命令来修复,你有比这更好的理想吗?(以下代码是 LaTeX3)
\NewDocumentCommand{\eftaf}{m}{ % expand filename to \textattachfile
\attachfile{#1}
}
\eftaf{\tl_to_str:N \l_data_fullname_tl}
问题 3:文件名中的点
我知道当文件名包含点时,我们应该使用{}
。(看这里)
\includegraphics{{img.img}.eps}
在 LaTeX3 中,我们是否有更好的方法来解决此问题?例如,使用str
不带扩展名的图像名称类型。(它将与带扩展名的名称分开。)
更新,因为我\includegraphics
现在可以使用变量。str
类型可以正常工作。以下是代码:
\tl_new:N \l_img_name_tl
\tl_set:Nn \l_img_name_tl {img.img}
\tl_new:N \l_ext_name_tl
\tl_set:Nn \l_ext_name_tl {pdf}
\includegraphics{\tl_to_str:N \l_img_name_tl . \l_ext_name_tl}
但是\l_img_name_tl
不能使用 {{img.img}},有没有什么理想的方法可以扩展它?