使用最新的 MiKTeX 安装,我尝试在 TikZ 中绘制图形,其中\draw
带有坐标的命令是从外部文件输入的。\draw
但是,命令在文件内部没有用分号结束,因为它的选项[-latex]
应该可以在主文件中分配。当我将文件内容直接插入主文件时,一切都正常,但是当我使用\input{myfilename}
插入文件内容时,我收到错误
Package tikz Error: Giving up on this path. Did you forget a semicolon?. \input{myfilename}
以下是 MWE:
这很好用:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\draw plot[smooth] coordinates { %
( 1, 0) %
( 0.5, -0.5) %
( 0, 0) %
}%
[-latex];
\end{scope}
\end{tikzpicture}
\end{document}
但这会产生错误:
\begin{filecontents}{genplot}
\draw plot[smooth] coordinates { %
( 1, 0) %
( 0.5, -0.5) %
( 0, 0) %
}
\end{filecontents}
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\input{genplot}%
[-latex];
\end{scope}
\end{tikzpicture}
\end{document}
奇怪的是运行良好至少一年前(我上次编译文档时)。因此,\input
从那时起,在 TikZ 图片中使用行为一定发生了一些变化。有人可以启发我吗,或者有人有解决方案,让我不需要编辑外部文件的内容?
答案1
这或多或少与以下问题相同:这个描述的变化引起的这里,并且可以使用相同的解决方法解决;将其添加到您的序言中:
\ExplSyntaxOn
\cs_new:Npn \expandableinput #1
{ \use:c { @@input } { \file_full_name:n {#1} } }
\AddToHook{env/tikzpicture/begin}
{ \cs_set_eq:NN \input \expandableinput }
\ExplSyntaxOff
上述代码将取代环境内部的\input
LaTeX 。\expandableinput
tikzpicture
\begin{filecontents}{genplot}
\draw plot[smooth] coordinates { %
( 1, 0) %
( 0.5, -0.5) %
( 0, 0) %
}
\end{filecontents}
\documentclass{article}
\usepackage{tikz}
\ExplSyntaxOn
\cs_new:Npn \expandableinput #1
{ \use:c { @@input } { \file_full_name:n {#1} } }
\AddToHook{env/tikzpicture/begin}
{ \cs_set_eq:NN \input \expandableinput }
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
\begin{scope}
\input{genplot}%
[-latex];
\end{scope}
\end{tikzpicture}
\end{document}