Я думаю, что у меня проблема с тем, как позиционируется созданный tikzpicture блок относительно остального текста. Я прочиталРазмещение фотографий TikZи я думаю, что понял, как работает вертикальное выравнивание, но не могу найти эквивалент для горизонтального.
Рассмотрим 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}
Который дает:
У меня здесь есть два сомнения:
почему эти две линии не одинаковы?
Я пытаюсь получить квадраты с восточной ссылкой (синие и зеленые)добуква B и C (учитывая, что
overlay
фигура не имеет размера, я хочу, чтобы она была расширенадо(точка вставки). Я понимаю, что это ожидаемо и правильно для данногоbaseline
случая (он просто смещает поле по вертикали); но... есть ли эквивалент для горизонтального случая?Если говорить точнее: я могу переместить фигуру с помощью
\llap
или\rlap
или подобных трюков, но мне интересно: когда tikz сжимает размер картинки до нуля, он как будто сжимает ее в точку; есть ли способ решитьгдеэтот момент? Яanchor
тоже пробовал, но это работает для объектоввкартинка, а не сама картинка.
решение1
Это может быть решением для вас. Я не уверен, как добиться желаемого эффекта, используя всего одну картинку TikZ. Поэтому у вас может возникнуть идея вложить картинки TikZ. Но если вы выполните поиск по вложенности tikzpicture
s, вы найдете множество мнений, что это не очень хорошая идея. Поэтому вместо того, чтобы напрямую вкладывать картинки TikZ, мы протаскиваем одну в другую с помощью конструкции \usebox
.
Я не уверен, что вы хотите делать с создаваемыми вами структурами, так что это может быть неподходящим для вас решением, но вот оно...
\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}