![带有覆盖层的 Tikzpicture 占用空间](https://linux22.com/image/238733/%E5%B8%A6%E6%9C%89%E8%A6%86%E7%9B%96%E5%B1%82%E7%9A%84%20Tikzpicture%20%E5%8D%A0%E7%94%A8%E7%A9%BA%E9%97%B4.png)
考虑一下这个MWE:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[remember picture,overlay]
\node [circle, fill=red!90!black, minimum width=15em] at (current page.center) {};
\end{tikzpicture}
\section{Amazing movable type!}
\end{document}
尽管带覆盖的图片不应占用空间,但部分标题还是被移动了。尝试只输入不带 的部分标题tikzpicture
,并注意部分标题上方的垂直空间较少:
\documentclass{article}
\begin{document}
\section{Amazing movable type!}
\end{document}
或参见插图:
该行为与占用空间的注释相同:
\documentclass{article}
\usepackage{tikz}
\begin{document}%
%
\begin{tikzpicture}[remember picture,overlay]%
\node [circle, fill=red!90!black, minimum width=15em] at (current page.center) {};%
\end{tikzpicture}%
%
\section{Amazing movable type!}
\end{document}
我注意到在以下情况下会添加额外的垂直空间:
section
tikzpicture 在标题前输入description
tikzpicture 在环境之前输入itemize
tikzpicture 在环境之前输入enumerate
tikzpicture 在环境之前输入
Tikzpicture 与普通文本的行为符合预期。例如,这将正常工作:
\documentclass{article}
\usepackage{lipsum, tikz}
\begin{document}
\section{Amazing movable type!}
\begin{tikzpicture}[remember picture,overlay]
\node [circle, fill=red!90!black, minimum width=15em] at (current page.center) {};
\end{tikzpicture}%but you must not leave some space here, otherwise, a single blank space is shown before text.
\lipsum[13]
\end{document}
为什么会发生这种情况?如何预防?\useasboundingbox (0,0);
?让 tikz 图片浮动 没有帮助。
编辑
Caramdir 建议\nointerlineskip
在之前输入tikzpicture
似乎可以解决章节标题的垂直空间问题,但描述和类似环境仍然有不必要的额外垂直空间。参见插图:
答案1
此tikzpicture
环境必须嵌入段落中,例如在开头或结尾
\section{Not amazing}
\begin{tikzpicture}[...]...\end{tikzpicture}%
Text of the paragraph
如果将其放在段落之间,它将与所有间距功能产生不良影响。垂直空间不会在分页符处消失,基线跳过空间将被插入,\addvspace
不会知道该环境之前的空格。
TikZ 的工作应该是认识到这样的覆盖环境不能对当前页面做任何事情,并将其保留以供发货。即使阿特别格什存在问题:
\AtBeginShipout{\begin{tikzpicture}[...]...\end{tikzpicture}}
由于 TikZ 图片产生了一个 hbox,导致输出再次向下移动(并出现过满 vbox 警告)。
答案2
如果你每页最多只能使用一张叠加图片,则可以使用background
包(另请参阅TikZ 叠加图片影响其周围的文本):
\documentclass{article}
\usepackage{tikz, showframe}
\usepackage[pages=some]{background}
\begin{document}
\backgroundsetup{opacity=1, scale=1, angle=0, contents={%
\begin{tikzpicture}[remember picture, overlay]
\node [circle, fill=red!90!black, minimum width=15em] at (current page.center) {};
\end{tikzpicture}}}
\BgThispage
\section{Amazing movable type!}
\end{document}
答案3
您可以将覆盖tikzpicture
环境放在宽度为零的框中:
\makebox[0pt][c]{%
\begin{tikzpicture}[overlay]
...
\end{tikzpicture}%
}
我还发现,代码结构换行符产生的“意外”空行可能会导致添加不必要的空格。确保注释掉敏感代码区域中的所有行尾。