我認為我對 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}