如何让空白的 TikZ 图片(具有绝对放置的内容)被忽略?

如何让空白的 TikZ 图片(具有绝对放置的内容)被忽略?

我想使用 TikZ 元素绝对放置在页面上。不幸的是,无论我做什么,TikZ 图片都会被视为字符,这导致它在不放置在另一个段落中时被视为段落。

我知道以下问题,但他们的解决方案在这里不起作用(除非我错过了什么):

最小示例

\documentclass{article}
\usepackage{tikz}

\begin{document}
\section{Some section}
\subsection{Some subsection}%
\tikz[remember picture,overlay,baseline]{\node at (current page.center){bla};}%
\begin{quote}
    This text has too much distance to the subsection heading.
\end{quote}
\end{document}

最小示例的输出

请注意文本前面的大间隙。如果我删除 TikZ 命令,它就会消失。(TikZ 放置的文本“bla”在示例中不可见,但这里并不关心。)

当然,在这个最小的例子中,我可以将 TikZ 图片放在引号后面,但我的实际情况更复杂,涉及一些宏和类似的东西,这使得移动 TikZ 命令不是普遍适用的解决方案。如果有帮助,想象一下整个quote环境都是动态的\input,并且不能触及和命令\section\subsection

答案1

即使您正在使用remember picture,overlay,TikZ 仍然会在部分命令之后留下零维,\hbox从而导致在引用环境之前开始一个段落。

你可以通过以下方式达到同样的效果:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\section{Some section}
\subsection{Some subsection}%\tikz[remember picture,overlay,baseline]{\node at (current page.center){bla};}%
\mbox{}%
\begin{quote}
    This text has too much distance to the subsection heading.
\end{quote}
\end{document}

我建议将 TikZ 图片调用放在不会创建这种多余段落的地方。

\documentclass{article}
\usepackage{tikz}
\begin{document}

\section{Some section}
\subsection{Some subsection}%
\begin{quote}
    \tikz[remember picture,overlay,baseline]{\node at (current page.center){bla};}%
    This text has too much distance to the subsection heading.
\end{quote}
\end{document}

结果是

在此处输入图片描述

答案2

您可以使用\everypar

\documentclass{article}
\usepackage{tikz}

\begin{document}
\section{Some section}
\subsection[Some subsection]{Some subsection}

\everypar=\expandafter{%
  \the\everypar\tikz[remember picture,overlay,baseline]{\node at (current page.center){bla};}%
  \everypar={}}

\begin{quote}
    This text has too much distance to the subsection heading.
\end{quote}
\subsection{Some subsection}
\begin{quote}
    This text has too much distance to the subsection heading.
\end{quote}
\end{document}

在此处输入图片描述

相关内容