如何防止 的定义.pic
在排版输出中添加额外的空格,其中 是在文档主体.pic
中定义的\tikzset{}
,而不是在序言中或环境中定义的tikzpicture
?
以下是 MWE:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{make me/.pic={\node{#1};}}%
\begin{tikzpicture}
\node {a};
\draw (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\end{document}
稍微少一点的 M WE 表明标准类也添加了额外的空间。
\documentclass{article}
\usepackage{showframe}
\usepackage{tikz}
\parindent=0pt
\begin{document}
x%
\begin{tikzpicture}
\node {a};
\draw (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
x\tikzset{make me/.pic={\node{#1};}}%
\begin{tikzpicture}
\node {a};
\draw (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\end{document}
我希望该\tikzset{}
行不会对排版输出产生任何影响。就我而言,它只是定义一些东西。只有当该东西实际被使用时,它才会影响输出。否则,它只会稍微增加编译时间。
.pic
请注意,我知道可以通过在序言中或环境内部定义来避免这种情况tikzpicture
。我特别需要防止在.pic
定义在document
但在外部时发生这种情况tikzpicture
。本文的其余部分只是简要解释为什么我想这样做。
我经常想说这样的话
\documentclass{standalone}
\begin{document}
\input{img-group-common}%
\begin{tikzpicture}
...
\end{tikzpicture}
\end{document}
我无法将其放在\input
序言中,因为图片将包含在standalone
包中,因此序言中的所有内容将被忽略。
我不想将 包含\input
在主文档的序言中,因为我想将设置保留在img-group-common
一组密切相关的图像中。通常,这些是具有共同结构或需要共同元素的图片。
通常,所有img-group.common.tex
都是\tikzset{...}
。问题是,如果\tikzset{...}
定义了pic
,则会在 排版输出 之前添加一个空格tikzpicture
。
答案1
第 4636-4640 行.pic
的定义如下tikz.code.tex
\pgfkeysdef{/handlers/.pic}{% \edef\pgf@temp{\pgfkeyscurrentpath}% \edef\pgf@temp{\expandafter\tikz@smuggle@pics@in\pgf@temp\pgf@stop}% \expandafter\pgfkeys\expandafter{\pgf@temp/.style={code={#1}}} }
作者%
在第 4639 行末尾漏掉了 a。
我在这里将其报告为一个错误:https://sourceforge.net/p/pgf/bugs/426/。
答案2
如果对任何人都有用,这里有一个补充符号 1 的答案,tex/latex/tikz-pic-fix/tikz-pic-fix.sty
:
\ProvidesPackage{tikz-pic-fix}[fix pic handler to eliminate spurious space]
\RequirePackage{tikz}
% ateb Symbol 1: https://tex.stackexchange.com/a/368531/
\pgfkeysdef{/handlers/.pic}{% tikz.code.tex: llinellau 4636-4640
\edef\pgf@temp{\pgfkeyscurrentpath}%
\edef\pgf@temp{\expandafter\tikz@smuggle@pics@in\pgf@temp\pgf@stop}%
\expandafter\pgfkeys\expandafter{\pgf@temp/.style={code={#1}}}% collir % yn y côd gwreiddiol
}
\endinput
这样做的好处是,您可以轻松删除修补代码或在必要时进行更改,然后任何使用文档都tikz-pic-fix
只会加载标准tikz
,您不必搜索它们来更改修复的每个应用程序。
编辑
或者 Ti钾Z 库,如果您忘记了对代码做了什么......
\ProvidesFile{tikzlibrarypicfix.code.tex}
\pgfkeysdef{/handlers/.pic}{% ateb Symbol 1: https://tex.stackexchange.com/a/368531/
\edef\pgf@temp{\pgfkeyscurrentpath}%
\edef\pgf@temp{\expandafter\tikz@smuggle@pics@in\pgf@temp\pgf@stop}%
\expandafter\pgfkeys\expandafter{\pgf@temp/.style={code={#1}}}%
}
\endinput