如何避免 TikZ 造成的空白

如何避免 TikZ 造成的空白

TikZ在自定义页面上添加背景图像时,它会TikZ在文档中留下一个空白区域,代码将在该空白区域内合并。例如,

\documentclass{article}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{calc}
\title{Test Title}
\author{A name}
\begin{document}
\maketitle
\tikz[overlay,remember picture]{%
\node [rotate=45] at ($(current page.north west)+(7,-7)$) {\Huge\textcolor{gray}{TikZ}};
}
\section{First}
\lipsum[1]
\section{Second}
\subsection{This is not nice}
\lipsum[1]
\subsection{This is fine}
\lipsum[1]
\end{document}

正如您在下面的示例中看到的,TikZ代码在文档中留下了痕迹(\maketitle第一节之后之前的空白区域)。这不是绘制 TikZ 图像的位置(位于边距中),但这是 TikZ 代码融入文档的位置TeX

我们如何处理TikZ代码以避免其在实际文档中留下痕迹?

图 1:无TikZ代码(第一部分之前没有多余空间)

图 2:包含TikZ代码(第一部分之前添加了一个额外的空格) 在此处输入图片描述 在此处输入图片描述

答案1

A tikzpicture(即使有overlay)意味着调用\leavevmode(如果您在示例中使用\leavevmode而不是,您将获得相同的占用空间)。tikzpicture

要添加tikzpicture有无overlay足迹,请将其放在可以退出垂直模式的位置。

示例(段落开头):

\documentclass{article}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{calc}
\title{Test Title}
\author{A name}
\begin{document}
\maketitle
\section{First}
\tikz[remember picture,overlay]%
\node [rotate=45] at ($(current page.north west)+(7,-7)$)%
{\Huge\textcolor{gray}{TikZ}};%
\lipsum[1]
\section{Second}
\subsection{This is not nice}
\lipsum[1]
\subsection{This is fine}
\lipsum[1]
\end{document}

答案2

您可以使用atbegshi包和\AtBeginShipout或相关命令,例如\AtBeginShipoutNext。这里,例如,让我们将\AtBeginShipoutFirst其放在第一页上:

\documentclass{article}
\usepackage{lipsum}
\usepackage{tikz}
\usepackage{atbegshi}
\usetikzlibrary{calc}
\title{Test Title}
\begin{document}
\AtBeginShipoutFirst{\tikz[overlay,remember picture]{
\node at ($(current page.west)+(2,0)$) {\Huge\textcolor{gray}{TEST}};
}}
\maketitle
\section{First}
\lipsum[1]
\section{Second}
\subsection{This is not nice}
\lipsum[1]
\subsection{This is fine}
\lipsum[1]
\end{document}

答案3

我找不到确切的问题,但根据经验法则,我们可能会避免将有趣的项目作为 LaTeX 看到的起始段落、表格单元格等的第一件事。通常它不喜欢这样。

例如,以下内容没有任何效果。

\documentclass{article}
\usepackage{lipsum}
\usepackage{tikz}

\title{Test Title}
\author{authorize}
\begin{document}
\maketitle
\section{First}
My precious sentence which doesn't finish with a par.
\tikz[overlay,remember picture]{
\path[use as bounding box](0,0);
\node [gray,inner sep=0,rotate=45] at ([shift={(7cm,-7cm)}]current page.north west) {\Huge TikZ};
}\lipsum[1]

\section{Second}
\subsection{This is not nice}
\lipsum[1]
\subsection{This is fine}
\lipsum[1]
\end{document}

在此处输入图片描述

相关内容