如何在‘includegraphics’中使用命令作为路径?

如何在‘includegraphics’中使用命令作为路径?

我想使用 来包含一个图形\includegraphics{\mycommand},但它不起作用。图片的路径将是.txt文件中写入的文本的组合。这是我的代码:

\usepackage{german}  
\usepackage{graphicx}  
% read in the files  
\def\textx{\input{x.txt}} %com  
\def\texty{\input{y.txt}} %bin  
\def\textz{\input{z.txt}} %ed   
\def\textp{\input{p.txt}} %.png  
% delete spaces etc.  
\newcommand{\textxx}{\unskip \textx \ignorespaces}  
\newcommand{\textyy}{\unskip \texty \ignorespaces}  
\newcommand{\textzz}{\unskip \textz \ignorespaces}  
\newcommand{\textpp}{\unskip \textp \ignorespaces}  
\textxx\textyy\textzz\textpp %combined.png  
%combine them  
\newcommand{\textv}{\textxx\textyy\textzz\textpp}  
\textv %output: combined.png  
\includegraphics{\textv} % Error: undefined control sequence  

答案1

问题中的例子揭示了不少问题:

  • graphics需要知道文件扩展名并调用 LaTeX\filename@parse来拆分路径规范。\filename@parse扩展第一个标记一次。因此可以将起始路径放在宏中。但在扩展步骤之后,不会扩展其他宏或嵌套宏。如果它们隐藏了重要的路径语法元素,它们将破坏文件名解析器。可以通过定义宏来扩展嵌套宏,\edef然后将带有扩展路径的宏传递给 ,从而避免嵌套宏\includegraphics

  • \unskip\ignorespaces是不可扩展的标记,它们将显示为路径组件。请查看包trimspaces或类似包以从字符串中删除开头和结尾的空格。

  • 此外,LaTeX\input不可扩展。即使是原始版本\@@input使用起来也相当棘手:

    • 行尾会导致不必要的空格,可以用 来抑制它们\endlinechar=-1
    • 文件结束在可扩展上下文中导致错误,有一些技巧可以避免该错误,例如\everyeof{\noexpand}使用 e-TeX。

    catchfile提供了将文件放入宏的方法。

如果您想使用\includegraphics{\imagepath},那么您可以检查\imagepath

\typeout{[meaning of \string\imagepath: \meaning\imagepath]}

将打印以下内容到控制台和日志输出,假设\imagepath包含x/y/z.png

[meaning of \imagepath: macro:->x/y/z.png]

显示的路径应该不包含 TeX 命令或不需要的空格。

相关内容