# How to use variable for \includegraphics and \attachfile in LaTeX3

I want make a function, it can insert image and attach file (e.g., the data about plotting), so I need set a variable for image name and it will use for attachfile.(\attachfile from attachfile2 package.)

But now I don't know how to use variable for \includegraphics and \attachfile in LaTeX3.

(I ignored \ExplSyntaxOn and \ExplSyntaxOff in below code.)

# Question 1: \includegraphics

Variable for LaTeX2e is fine.

\def\imgname{img.eps}
\includegraphics{\imgname}


But LaTeX3 failed:

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


Successful only when I use "example-image" (no extension), but I want keep extension for select different file which has same name (img.eps, img.png, ....), so I tried another variable for extension but failed also.

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


(Update: I discover above code only failed in eps, it work fine in pdf, png, jpg. And \tl_use:N may not required, I am not sure.)

# Question 2: \attachfile

LaTeX2e failed also:

\def\fname{test.txt}
\attachfile{\fname}


Look like \attachfile will not expand any macro. So I define command to fix, Do you have any ideal better than this ? (Below code is LaTeX3)

\NewDocumentCommand{\eftaf}{m}{ % expand filename to \textattachfile
\attachfile{#1}
}
\eftaf{\tl_to_str:N \l_data_fullname_tl}


# Question 3: dot in file name

I know when filename include dot, we should use {}. (see here)

\includegraphics{{img.img}.eps}


Do we have better method to solve this problem in LaTeX3? For example use str type for image name without extension. (And It will split from name with extension.)

Update, because I can use \includegraphics by variable now.str type can work fine. Below is code:

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


But \l_img_name_tl can not use {{img.img}}, any ideal for expand this?

• The problem with multiple dots in a graphics file name is solved by package grffile. – Heiko Oberdiek Mar 31 '17 at 8:24
• The file name parser that is used by package graphics requires that the extension is not hidden inside a macro. Only a macro at the start of the image file name is expanded once. – Heiko Oberdiek Mar 31 '17 at 10:33
• Maybe related: tex.stackexchange.com/questions/350258 – Dr. Manuel Kuehner Apr 6 '17 at 11:40