tikz叠加图片水平定位

tikz叠加图片水平定位

我认为我对 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}

这使:

上述 MWE 的结果,8 个彩色方块

我这里有两个疑问:

  1. 为什么这两条线不一样?

  2. 我正在尝试获得以东为参考的方块(蓝色和绿色)字母 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}

在此处输入图片描述

相关内容