tikzpicture 中的 \input 与手动插入不同

tikzpicture 中的 \input 与手动插入不同

使用最新的 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

上述代码将取代环境内部的\inputLaTeX 。\expandableinputtikzpicture

在此处输入图片描述

\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}

相关内容