
Wenn Sie auf einer benutzerdefinierten Seite ein Hintergrundbild hinzufügen TikZ
, bleibt ein leerer Bereich, in dem der TikZ
Code in das Dokument eingefügt wird. Beispiel:
\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}
Wie Sie in den folgenden Beispielen sehen können, TikZ
hinterlässt der Code einen Fußabdruck im Dokument (einen leeren Bereich vor \maketitle
dem ersten Abschnitt). Dies ist nicht die Stelle, an der das TikZ-Bild gezeichnet wird (das sich am Rand befindet), sondern die Stelle, an der der TikZ-Code in das Dokument eingefügt wird TeX
.
Wie behandeln wir den TikZ
Code, um seinen Fußabdruck im eigentlichen Dokument zu vermeiden?
Abbildung 1: Ohne TikZ
Code (kein zusätzliches Leerzeichen vor dem ersten Abschnitt)
Abbildung 2: Mit TikZ
Code (vor dem ersten Abschnitt wurde ein zusätzliches Leerzeichen hinzugefügt)
Antwort1
Ein tikzpicture
(auch mit overlay
) impliziert einen Aufruf von \leavevmode
(wenn Sie in Ihrem Beispiel \leavevmode
anstelle von Ihrem verwenden tikzpicture
, erhalten Sie denselben Footprint).
Um einen Fußabdruck tikzpicture
mit oder overlay
ohne hinzuzufügen, platzieren Sie ihn dort, wo Sie den vertikalen Modus beenden können.
Beispiel (am Anfang eines Absatzes):
\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}
Antwort2
atbegshi
Sie können das Paket und \AtBeginShipout
/oder verwandte Befehle auch verwenden \AtBeginShipoutNext
. Hier ist beispielsweise ein Beispiel, wie wir \AtBeginShipoutFirst
es bereits auf der ersten Seite erhalten:
\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}
Antwort3
Ich kann die genaue Frage nicht finden, aber als Faustregel sollten wir es vermeiden, interessante Elemente als Erstes an den Anfang von Absätzen, Tabellenzellen usw. zu setzen, die LaTeX sieht. Oft gefällt ihm das nicht.
Folgendes hat beispielsweise keinerlei Wirkung.
\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}