在 expl3 包或类中使用 tikz(2017 版)

在 expl3 包或类中使用 tikz(2017 版)

这个问题接着一个问题在 expl3 包中使用 \usetikzlibrary 失败。虽然链接的问题在一段时间前还有效,但它的答案似乎不再有效了。

问题:如何\usetikzlibrary在 expl3 包或类中使用而不会出现类似错误

v\pgfversion ]$Header:/cvsroot/pgf/pgf/generic/pgf/frontendlayer/tikz\ETC.
! File ended while scanning use of \next.
<inserted text> 
                \par 

MWE(从另一篇文章的答案中复制):

\documentclass{report}
\usepackage{filecontents}
\begin{filecontents}{mytestpackage.sty}
\RequirePackage{expl3}
\ProvidesExplPackage{mytestpackage}{2012/05/26} {0.1}{mytestpackage}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
\ExplSyntaxOff
\patchcmd
  {\pgfutil@InputIfFileExists}
  {\input #1}
  {%
    \@pushfilename
    \input #1 %
    \@popfilename
  }
  {}{}
\ExplSyntaxOn
\usetikzlibrary{calc}
\end{filecontents}
\usepackage{mytestpackage}
\begin{document}
foo bar
\end{document}

我收到的错误(使用完全更新的TL2017):

! I can't find file `t{i}kzlibrarycalc.code.tex'.
<argument> ...filename \input tikzlibrary\pgf@temp .code.tex 
                                                  \@popfilename \relax 
l.20 \usetikzlibrary{calc}

答案1

正如所提到的https://www.texdev.net/2015/07/30/making-custom-loaders-expl3-aware/应该\@currname在 之后设置\@pushfilename

\@pushfilename使用旧版 expl3 时您不会收到错误,但现在命令末尾\@pushfilenameaux确实需要“两个命令和一个参数”。

因此,通过此更改,您的文件将再次编译:

\documentclass{report}
\usepackage{filecontents}
\begin{filecontents}{mytestpackage.sty}
\RequirePackage{expl3}
\ProvidesExplPackage{mytestpackage}{2012/05/26} {0.1}{mytestpackage}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
\ExplSyntaxOff
\patchcmd
  {\pgfutil@InputIfFileExists}
  {\input #1}
  {%
    \@pushfilename
    \xdef\@currname{#1}%
    \input #1 %
    \@popfilename
  }
  {}{}
\ExplSyntaxOn
\usetikzlibrary{calc}
\end{filecontents}
\usepackage{mytestpackage}
\begin{document}
foo bar
\end{document}

答案2

下列作品。

\documentclass{report}
\usepackage{filecontents}
\begin{filecontents}{mytestpackage.sty}
\RequirePackage{expl3}
\ProvidesExplPackage{mytestpackage}{2012/05/26} {0.1}{mytestpackage}
\ExplSyntaxOff
\RequirePackage{tikz}
\usetikzlibrary{calc}
\ExplSyntaxOn
\end{filecontents}
\usepackage{mytestpackage}
\begin{document}
foo bar
\end{document}

在此处输入图片描述

相关内容