Como evitar o espaço vazio causado pelo TikZ

Como evitar o espaço vazio causado pelo TikZ

Ao adicionar uma imagem de fundo em TikZuma página customizada, deixa um espaço vazio onde o TikZcódigo é incorporado ao documento. Por exemplo,

\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}

Como você pode ver nos exemplos abaixo, o TikZcódigo deixa uma marca no documento (um espaço vazio antes \maketitleda primeira seção). Não é aqui que a imagem TikZ é desenhada (que fica na margem), mas é aqui que o código TikZ é incorporado ao TeXdocumento.

Como tratamos o TikZcódigo para evitar que ele fique no documento real?

Figura 1: Sem TikZcódigo (sem espaço extra antes da primeira seção)

Figura 2: Com TikZcódigo (um espaço extra adicionado antes da primeira seção) insira a descrição da imagem aqui insira a descrição da imagem aqui

Responder1

A tikzpicture(mesmo com overlay) implica uma chamada para \leavevmode(se você usar \leavevmodeem vez de tikzpictureseu exemplo, obterá a mesma pegada).

Para adicionar um tikzpicturesem overlaypegada, coloque-o onde você possa sair do modo vertical.

Exemplo (no início de um parágrafo):

\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}

Responder2

Você pode usar o atbegshipacote e \AtBeginShipout/ou comandos relacionados, como \AtBeginShipoutNext. Aqui, por exemplo, vamos pegar \AtBeginShipoutFirstpara colocá-lo já na primeira página:

\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}

Responder3

Não consigo encontrar a pergunta exata, mas como regra geral, podemos evitar colocar itens interessantes como as primeiras coisas que o LaTeX vê no início de parágrafos, células tabulares, etc.

Por exemplo, o seguinte não tem nenhum efeito.

\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}

insira a descrição da imagem aqui

informação relacionada