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}

在此輸入影像描述

相關內容