如何制作 \input 的包装器

如何制作 \input 的包装器

我想制作一个包装器来\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 正在尝试查找包含括号的文件名。

相关内容