我想制作一个包装器来\input
包含 TikZ 图形。我尝试过类似这样的操作:
\newcommand{\inputtikz}[1]{%
\tikzsetnextfilename{#1}
\input{figures/{#1}.tikz}
}
但有了这个构造我得到:
LaTeX 错误:未找到文件“myFigure.tikz”。
做这样的事情的正确方法是什么?
有人知道有关 LaTeX 宏的好教程或其他阅读材料吗?
答案1
您需要{figures/#1.tikz}
假设您已经为您的文件提供了.tikz
扩展名。 (没有{}
)#1
您还需要%
在这些行的末尾。
正如你所看到的,它正在寻找具有名称的文件{myFigure}.tkz
答案2
这不是包装器问题,这只是对括号{}
工作原理的误解。我想补充一下关于\input
括号的简短总结:
\input
作为原始 TeX 和 pdfTeX 中的 TeX 原语,仅接受文件名无括号用空格或其他基元分隔。例如:\input file
或\input file\relax
。- LaTeX 将
\input
基元重新定义为具有一个参数的宏。此参数可以用括号括起来,但不必如此。例如:\input {file}
或。扫描参数的两种方法由LaTeX 内核中的基元\input file
实现。\@ifnextchar\bgroup\@iinput\@@input
\@@input
\input
- LuaTeX 对
\input
原语进行了扩展,以便用户可以使用带空格的文件名。此扩展允许使用括号作为分隔符。示例:\input file
或\input {file}
或\input {filename with spaces}
。 - XeTeX 对带空格的文件名使用另一种语法:用户可以通过 将其丢失
"..."
。例如:\input "filename with spaces"
。
结果:当您\input {filename}
在 LaTeX 之外和 LuaTeX 之外使用时,您会收到错误消息:I can't find file {filename}
。实际上,TeX 正在尝试查找包含括号的文件名。