So vermeiden Sie durch TikZ verursachten Leerraum

So vermeiden Sie durch TikZ verursachten Leerraum

Wenn Sie auf einer benutzerdefinierten Seite ein Hintergrundbild hinzufügen TikZ, bleibt ein leerer Bereich, in dem der TikZCode 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, TikZhinterlässt der Code einen Fußabdruck im Dokument (einen leeren Bereich vor \maketitledem 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 TikZCode, um seinen Fußabdruck im eigentlichen Dokument zu vermeiden?

Abbildung 1: Ohne TikZCode (kein zusätzliches Leerzeichen vor dem ersten Abschnitt)

Abbildung 2: Mit TikZCode (vor dem ersten Abschnitt wurde ein zusätzliches Leerzeichen hinzugefügt) Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Antwort1

Ein tikzpicture(auch mit overlay) impliziert einen Aufruf von \leavevmode(wenn Sie in Ihrem Beispiel \leavevmodeanstelle von Ihrem verwenden tikzpicture, erhalten Sie denselben Footprint).

Um einen Fußabdruck tikzpicturemit oder overlayohne 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

atbegshiSie können das Paket und \AtBeginShipout/oder verwandte Befehle auch verwenden \AtBeginShipoutNext. Hier ist beispielsweise ein Beispiel, wie wir \AtBeginShipoutFirstes 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}

Bildbeschreibung hier eingeben

verwandte Informationen