Acho que tenho um problema sobre como a caixa criada pelo tikzpicture está posicionada em relação ao restante do texto. eu liPosicionando fotos TikZe acho que entendi como funciona o alinhamento vertical, mas não consigo encontrar um equivalente para o horizontal.
Considere o MWE:
\documentclass{report}
\usepackage{tikz}
\def\go[#1]{% does not work with current bounding box
\tikz[#1]{
\draw (0,0) node (sw) {sw} --
(1,0) node (se) {se} --
(1,1) node (ne) {ne} --
(0,1) node (nw) {nw} -- cycle;}
\hspace*{2cm}
}
\begin{document}
A\go[overlay, red, baseline=(sw)]
B\go[overlay, blue, baseline=(se)]
C\go[overlay, green, baseline=(ne)]
D\go[overlay, black, baseline=(nw)]
\vspace{2cm}
A\go[overlay, red, baseline=(current bounding box.south west)]
B\go[overlay, blue, baseline=(current bounding box.south east)]
C\go[overlay, green, baseline=(current bounding box.north east)]
D\go[overlay, black, baseline=(current bounding box.north west)]
\end{document}
Que dá:
Tenho duas dúvidas aqui:
por que as duas linhas não são iguais?
Estou tentando ter os quadrados com referência leste (azul e verde)antesas letras B e C (dado que a
overlay
figura não tem tamanho, quero que ela se estendaanteso ponto de inserção). Entendo que isso é esperado e correto para obaseline
caso (apenas desloca a caixa verticalmente); mas... existe um equivalente para o caso horizontal?Para ser mais específico: posso mover a figura com truques
\llap
ou\rlap
truques semelhantes, mas fiquei pensando: quando o tikz reduz o tamanho da imagem a zero, é como se a estivesse colapsando até um ponto; existe uma maneira de decidirondeeste ponto é? Eu tenteianchor
também, mas funciona para os objetosema imagem, não a imagem em si.
Responder1
Esta pode ser uma solução para você. Não tenho certeza de como conseguir o efeito desejado usando apenas uma imagem TikZ. Então, você pode ter a ideia de aninhar as imagens do TikZ. Mas se você fizer uma pesquisa sobre aninhamento tikzpicture
, encontrará muitas opiniões expressas de que esta não é uma boa ideia. Então, em vez de aninhar diretamente as imagens do TikZ, contrabandeamos uma para a outra por meio de uma \usebox
construção.
Não tenho certeza do que você quer fazer com as estruturas que está criando, então esta pode não ser uma solução que funcione para você, mas aqui vai...
\documentclass{report}
\usepackage{tikz}
\def\go[#1]{% does not work with current bounding box
\tikz[#1]{
\draw (0,0) node (sw) {sw} --
(1,0) node (se) {se} --
(1,1) node (ne) {ne} --
(0,1) node (nw) {nw} -- cycle;
}}
\makeatletter
\def\ae@anchor@xoffset{0pt}
\def\ae@anchor@yoffset{0pt}
%% "content" will hold the smuggled in tikz picture. It should be wrapped in
%% brackets to prevent the key parser from misinterpreting comma.
%%
%% "anchor" will specify how to anchor the node for the second tikz picture
%%
%% "x|yoffset" will allow you to fine tune the placement of the content
\pgfkeys{/ae/anchor/picture/.cd,
content/.store in=\ae@anchor@picture@content,
anchor/.code={\def\ae@anchor@picture@node@anchor{node [outer sep=0pt,inner sep=0pt,anchor=#1]}},
xoffset/.store in=\ae@anchor@xoffset,
yoffset/.store in=\ae@anchor@yoffset,
}
\newsavebox\aebox
%% everything will be placed in a group to localize values to
%% current instance.
\newcommand\aeanchorpicture[1]{%%
\bgroup
\pgfkeys{/ae/anchor/picture/.cd,#1}%%
\begin{lrbox}\aebox
\ae@anchor@picture@content
\end{lrbox}%%
\tikz[remember picture,overlay]
\path (0,0) -- ++(\ae@anchor@xoffset,\ae@anchor@yoffset)
\ae@anchor@picture@node@anchor {\usebox\aebox};%%
\egroup
\hspace*{2cm}%%
}
\makeatother
\begin{document}
A\aeanchorpicture{content={\go[red]}, anchor=south west, xoffset=-2pt,yoffset=-2pt}%%
B\aeanchorpicture{content={\go[blue]}, anchor=south east}%%
C\aeanchorpicture{content={\go[green]}, anchor=north east}%%
D\aeanchorpicture{content={\go[black]}, anchor=north west}%%
\end{document}