转换坐标,因此 tikzpicture 中的 (0,0) 被放置在页面的所需位置

转换坐标,因此 tikzpicture 中的 (0,0) 被放置在页面的所需位置

在 tikz 中我可以执行绝对定位,例如(current page.center),但是我如何指定/转换坐标,以便(0,0)在 tikzpicture 中最终位于明确定义的位置,例如页面中心或先前 tikzpicture 中使用的节点的位置?

它可能非常容易获得,但我浏览了 PGF 手册并没有在那里找到它。

答案1

使用TikZ 键将原点移至该点。在或 内部环境的shift={(<coordinate>)}选项中使用它。在这种情况下,通常应该使用。tikzpicturescopetikzpictureremember 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另一个节点的方法。tikzpictureshift

例子

\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-带覆盖

现在你可能会问为什么有人愿意使用这种不如 简洁的技术tikzpictureshift我会告诉你,因为这就是我最终使用这种技术的原因。

评论

上述技术使您可以轻松改变正在定位的内部点tikzpicture(根据放置它​​的节点):

  • 来自tikpicture(0,0)
  • tikzpicture的中心。

怎么做?通过overlay从内部tikzpicture选项中删除。缺乏内部选项是 Altermundus 在外部tikzpicture节点发生偏移的怪癖背后的原因。他离这个目标很近……

内部 tikzpicture-不带覆盖

后记

确实,这个评论与原始问题无关,但对我来说却很重要,因此我认为我应该将其作为单独的答案与您分享。希望它对其他人有用。

相关内容