我认为我对 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
,您会发现很多人认为这不是一个好主意。因此,我们不是直接嵌套 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}