在 tikz 中我可以执行绝对定位,例如(current page.center)
,但是我如何指定/转换坐标,以便(0,0)
在 tikzpicture 中最终位于明确定义的位置,例如页面中心或先前 tikzpicture 中使用的节点的位置?
它可能非常容易获得,但我浏览了 PGF 手册并没有在那里找到它。
答案1
使用TikZ 键将原点移至该点。在或 内部环境的shift={(<coordinate>)}
选项中使用它。在这种情况下,通常应该使用。tikzpicture
scope
tikzpicture
remember picture,overlay
\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
% Relative to page center:
\begin{tikzpicture}[remember picture,overlay,shift={(current page.center)}]
\draw (0,0) rectangle (1,1) node (SomeNode) {};
\fill [red] (0,0) circle (5pt);
\end{tikzpicture}
% Relative to node in previous picture:
\begin{tikzpicture}[remember picture,overlay,shift={(SomeNode.center)}]
\draw (0,0) rectangle (1,1);
\fill [green] (0,0) circle (5pt);
\end{tikzpicture}
\lipsum
\end{document}
答案2
在马丁的帮助下变得更简单!
\documentclass{article}
\usepackage{tikz}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}[remember picture, overlay,shift=(current page.center)]
\draw (-2,-1) rectangle (3,5);
\draw (0,0) circle(2pt);
\draw[gray] (current page.north) -- (current page.south)
(current page.west) -- (current page.east);
\end{tikzpicture}
\end{document}
第一个想法是:
\begin{tikzpicture}[remember picture, overlay]
\node[inner sep=0pt] at (current page.center)
{\tikz[overlay]\draw (-2,-1) rectangle (3,5);} ; % overlay is necessary (przemoc !!)
\draw[gray] (current page.north) -- (current page.south)
(current page.west) -- (current page.east);
\end{tikzpicture}
答案3
就在我在这里提问之后(也就是在我得到 TeX.SE 上的任何答案之前)米克特来自(我问过类似的问题,但只关于居中)说我可以将节点放在页面的中心。我必须承认我忽略了 TikZ 的这个嵌入功能。#[email protected]
(0,0)
tikzpicture
就这么简单,但显然并不像看上去那么简单。毕竟 Altermundus 的答案的早期版本都利用了这种技术,但有一些怪癖。这个答案是提供一种无需设置密钥即可嵌入tikzpicture
另一个节点的方法。tikzpicture
shift
例子
\documentclass{minimal}
\usepackage[a6paper,margin=0pt]{geometry}
\usepackage{tikz}
\begin{document}
\pagestyle{empty}
\parindent=0pt
\begin{tikzpicture}[remember picture,overlay,x=25mm,y=25mm]
\draw[lightgray]
(current page.north) -- (current page.south)
(current page.west) -- (current page.east);
\draw
(current page.center) circle (5pt);
\node at (current page.center) {%
\begin{tikzpicture}[overlay]
\draw
(-1,-1) -- (0,1) -- (1,-1) -- (2,1);
\end{tikzpicture}%
};
\end{tikzpicture}
\end{document}
现在你可能会问为什么有人愿意使用这种不如 简洁的技术tikzpicture
。shift
我会告诉你,因为这就是我最终使用这种技术的原因。
评论
上述技术使您可以轻松改变正在定位的内部点tikzpicture
(根据放置它的节点):
- 来自
tikpicture
(0,0)
- 到
tikzpicture
的中心。
怎么做?通过overlay
从内部tikzpicture
选项中删除。缺乏内部选项是 Altermundus 在外部tikzpicture
节点发生偏移的怪癖背后的原因。他离这个目标很近……
后记
确实,这个评论与原始问题无关,但对我来说却很重要,因此我认为我应该将其作为单独的答案与您分享。希望它对其他人有用。