Creo que tengo un problema sobre cómo se posiciona el cuadro creado por tikzpicture con respecto al resto del texto. he leídoPosicionamiento de imágenes TikZy creo que he entendido cómo funciona la alineación vertical, pero no encuentro un equivalente para la horizontal.
Considere el 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}
Lo que da:
Tengo dos dudas aquí:
¿Por qué las dos líneas no son iguales?
Estoy intentando tener los cuadrados con la referencia este (azul y verde)antesla letra B y C (dado que la
overlay
figura no tiene tamaño, quiero que se extiendaantesel punto de inserción). Entiendo que esto es lo esperado y correcto para elbaseline
caso (simplemente desplaza el cuadro verticalmente); pero… ¿existe algún equivalente para el caso horizontal?Para ser más específico: puedo mover la figura con trucos
\llap
similares\rlap
, pero me preguntaba: cuando tikz reduce el tamaño de la imagen a cero, es como si la colapsara hasta un punto; ¿Hay alguna manera de decidir?dóndeeste punto es? Yoanchor
también lo intenté, pero funciona para los objetos.enla imagen, no la imagen en sí.
Respuesta1
Esta podría ser una solución para ti. No estoy seguro de cómo lograr el efecto que deseas usando solo una imagen de TikZ. Entonces, es posible que se te ocurra anidar las imágenes de TikZ. Pero si realiza una búsqueda sobre anuncios anidados tikzpicture
, encontrará muchas opiniones expresadas de que no es una buena idea. Entonces, en lugar de anidar directamente las imágenes de TikZ, las pasamos de contrabando a la otra mediante una \usebox
construcción.
No estoy seguro de qué quieres hacer con las estructuras que estás creando, por lo que puede que esta no sea una solución que funcione para ti, pero aquí va...
\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}