如何创建全局命名、页面不可变的 TikZ 节点,类似于current page
特殊节点?我会解释。
我想要创建的节点类型是全局命名remember picture
从某种意义上说,它有一个名称,可以在每个选项和overlay
“打开”的 TikZ 图片中引用它。
这是页面不可变从某种意义上说,当在两个tikzpicture
环境中访问其任何锚点时:一个环境的内容最终排版在页面 x 上,另一个环境的内容最终排版在不同的页面 y 上,锚点的坐标是相同的:如果锚点的坐标在(1,3)
页面 x 上,那么它们将再次位于(1,3)
页面 y 上。
这些节点的目的是在每个页面上设置布局区域,TikZ 图片的元素可以相对于这些区域进行定位,例如页眉区域、页脚区域等。
包裹tikzpage节点提供了我上面描述的几种特殊节点。它提供了节点current page text area
、current page marginpar area
、current page header area
和current page footer area
。但是:
答:此列表已关闭。tikzpagenodes
不提供用于创建其他此类用户定义的特殊节点的工具。
B. 虽然包中特殊节点产生的布局tikzpagenodes
非常适合 类文档article
,但不太适合beamer
演示文稿。我想创建自己的特殊节点,以更准确地反映beamer
幻灯片的自然布局。(有关此内容的更多信息,请参阅这个帖子及其评论。)
答案1
我所看到的是tikzpagenodes
,您使用了\@newtikzpagenode
两个\pgfpoint
s -\southwest
和\northeast
。
tikzpagenodes.sty
以下是仅定义的代码(current page text area)
:
\documentclass{article}
\usepackage{tikz}
\usepackage[showframe]{geometry}
\makeatletter
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\RequirePackage{tikz}
\RequirePackage{ifoddpage}
\tikzset{every picture/.append style={execute at begin picture={%
\ifpgfrememberpicturepositiononpage
\checkoddpage
\fi
}}}
\def\currentsidemargin{\ifoddpageoroneside\oddsidemargin\else\evensidemargin\fi}%
\def\current@textarea@left{(1in+\hoffset+\currentsidemargin)}
\def\current@textarea@top{(1in+\voffset+\topmargin+\headheight+\headsep)}
\def\@newtikzpagenode#1{%
\expandafter\let\csname pgf@sh@ns@#1\expandafter\endcsname\csname pgf@sh@ns@current page\endcsname
\expandafter\let\csname pgf@sh@nt@#1\expandafter\endcsname\csname pgf@sh@nt@current page\endcsname
\expandafter\let\csname pgf@sh@pi@#1\expandafter\endcsname\csname pgf@sh@pi@current page\endcsname
\expandafter\def\csname pgf@sh@np@#1\endcsname
}
\@newtikzpagenode{current page text area}{%
\def\southwest{\pgfpoint{\current@textarea@left}{\paperheight-\current@textarea@top-\textheight}}%
\def\northeast{\pgfpoint{\current@textarea@left+\textwidth}{\paperheight-\current@textarea@top}}%
}
\makeatother
\begin{document}
\begin{tikzpicture}[overlay, remember picture]
\draw[red, thick] (current page text area.north west) circle[radius=10pt];
\end{tikzpicture}
\end{document}
答案2
谢谢Andrew Stacey 的评论,我意识到我可以在第一页/幻灯片中创建一个具有所需位置和尺寸的简单空节点来实现我的目标,如下面的 LaTeX 代码所示。
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}{First Frame}
\tikz
[remember picture, overlay]
\node
[
inner sep = 0pt,
anchor = center,
minimum width = 2cm,
minimum height = 2cm
]
(current text area)
at (current page.center)
{}
;
Hello, world!
\end{frame}
\begin{frame}{Second Frame}
The end!
\begin{tikzpicture} [remember picture, overlay]
\draw [fill] (current text area.south west) circle (2pt);
\draw (current text area.north east) circle (3pt);
\end{tikzpicture}
\end{frame}
\end{document}
该代码生成的PDF如下。