
Como posiciono uma imagem TikZ em relação ao corpo do texto? Desenhei um círculo usando TikZ e gostaria de posicioná-lo ao lado do corpo do texto (para que seja fácil de ver enquanto você lê, mas não atrapalhe). Não sei ao certo como fazer isso. Tentei alterar as coordenadas para mover a imagem, mas parece mover apenas as figuras umas em relação às outras, em vez de mover a coisa inteira. Eu apreciaria alguma ajuda com isso. Obrigado!
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
Body text.
\begin{tikzpicture}
\draw [fill = lightgray] (0,0) circle [radius = 1.25 cm];
\end{tikzpicture}
\caption{Circular Region}
\end{document}
Responder1
Para deixar claro os exemplos a seguir, definirei uma macro que produz uma imagem tikz simples, como um círculo com algum texto dentro:
\newcommand{\mypicture}[1][]{% 1 optional parameter for options for the tikz picture
\begin{tikzpicture}[#1]
\node[draw, circle, fill=yellow!30, inner sep=2mm] (a) {A};
\end{tikzpicture}
}
O que produz:
Depois de terminar uma imagem do TikZ, para o TeX ela é apenas uma caixa. Pense nisso como um “grande personagem” que pode fazer parte de um parágrafo, como o seguinte:
This paragraph contains a figure \mypicture{} inline.
Como você pode ver, a “caixa” que contém a imagem está alinhada com o restante do texto na linha de base. Cada caractere possui uma linha imaginária que é usada para alinhá-lo verticalmente com outros caracteres na mesma linha. A caixa pode se estender acima e abaixo de sua linha de base, mas por padrão o tikz coloca a linha de base da imagem bem na parte inferior da caixa resultante.
Você pode alterar isso, dando a opção baseline
ao seu tikzpicture. Esta opção pode receber como argumento uma dimensão como 1mm
, ou o nome de qualquer coordenada dentro da figura, como a.center
, a.north
ou ainda a.base
, que é a linha de base do texto dentro do nó a
. Vejamos estes casos:
\parbox{6cm}{
\begin{itemize}
\item Default: \hrulefill\mypicture
\item 2mm: \hrulefill\mypicture[baseline=-2mm]
\item Center: \hrulefill\mypicture[baseline=(a.center)]
\item North: \hrulefill\mypicture[baseline=(a.north)]
\item Base: \hrulefill\mypicture[baseline=(a.base)]
\end{itemize}
}
Claro, além de usá-lo "inline", você pode colocá-lo em qualquer lugar onde possa colocar qualquer outro texto, como uma nota de rodapé, uma nota marginal, uma tabela ou um ambiente de figura (o que o faria flutuar). Veja-o, por exemplo, numa nota marginal:
\marginpar{\mypicture[baseline=(a.base)]}
\lipsum[1]
\lipsum[2]
Você também pode usá-lo em combinações com pacotes como wrapfig
o que permite que figuras ou tabelas tenham texto agrupado em torno delas.
Se você usar as opções tikz remember picture
e overlay
, poderá colocá-lo em qualquer posição absoluta da página, como mostra a outra resposta.
Responder2
Você pode usar as remember picture,overlay
opções e o current page
nó; no exemplo a seguir também usei otikznodepages
pacote para obter um controle ainda mais preciso usando o current page text area
nó:
\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{tikz}
\usepackage{tikzpagenodes}
\usepackage{lipsum}
\begin{document}
\begin{tikzpicture}[remember picture,overlay]
\draw[fill = lightgray] ([xshift=0.7cm]current page text area.east) circle [radius = 0.5 cm];
\draw[fill = red!40] ([xshift=-0.7cm]current page text area.west) circle [radius = 0.5 cm];
\draw[fill = green!40] ([yshift=0.7cm]current page text area.north) circle [radius = 0.5 cm];
\draw[fill = blue!40] ([yshift=-0.7cm]current page text area.south) circle [radius = 0.5 cm];
\draw[fill = magenta!40] ([xshift=0.7cm,yshift=0.7cm]current page.south west) circle [radius = 0.5 cm];
\draw[fill = olive!40] ([xshift=-0.7cm,yshift=-0.7cm]current page.north east) circle [radius = 0.5 cm];
\end{tikzpicture}
\lipsum[4]\lipsum[4]\lipsum[4]
\end{document}