我想使用 来包含一个图形\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 命令或不需要的空格。