Ich glaube, ich habe ein Problem damit, wie die von tikzpicture erstellte Box im Hinblick auf den Rest des Textes positioniert ist. Ich habe gelesenPositionierung von TikZ-Bildernund ich glaube, ich habe verstanden, wie die vertikale Ausrichtung funktioniert, kann aber kein Äquivalent für die horizontale finden.
Betrachten Sie das 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}
Das ergibt:
Ich habe hier zwei Zweifel:
warum sind die beiden Zeilen nicht gleich?
Ich versuche, die Quadrate mit dem Ostbezug (blau und grün) zu habenVordie Buchstaben B und C (da die
overlay
Figur keine Größe hat, möchte ich, dass sie sich ausdehntVorder Einfügepunkt). Ich verstehe, dass dies in diesembaseline
Fall zu erwarten und richtig ist (es verschiebt das Feld nur vertikal); aber ... gibt es ein Äquivalent für den horizontalen Fall?Um genauer zu sein: Ich kann die Figur mit
\llap
oder\rlap
oder ähnlichen Tricks bewegen, aber ich frage mich: Wenn Tikz die Größe des Bildes auf Null reduziert, ist es, als würde es auf einen Punkt zusammenfallen; gibt es eine Möglichkeit zu entscheidenWodieser Punkt ist? Ich habe esanchor
auch versucht, aber es funktioniert für die ObjekteIndas Bild, nicht das Bild selbst.
Antwort1
Dies könnte eine Lösung für Sie sein. Ich bin mir nicht sicher, wie ich mit nur einem TikZ-Bild den gewünschten Effekt erzielen kann. Sie könnten also auf die Idee kommen, die TikZ-Bilder zu verschachteln. Wenn Sie jedoch nach Verschachtelungen suchen tikzpicture
, finden Sie viele Meinungen, dass dies keine gute Idee ist. Anstatt die TikZ-Bilder also direkt zu verschachteln, schmuggeln wir sie mithilfe einer \usebox
Konstruktion in die anderen.
Ich bin nicht sicher, was Sie mit den Strukturen machen möchten, die Sie erstellen. Daher ist dies möglicherweise keine Lösung, die für Sie funktioniert, aber hier ist sie ...
\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}