При добавлении фонового изображения 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
into в вашем примере, вы получите тот же след).
Чтобы добавить 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}