Как избежать пустого пространства, вызванного 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вместо вашего tikzpictureinto в вашем примере, вы получите тот же след).

Чтобы добавить 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}

введите описание изображения здесь

Связанный контент