![如何将一张 PGF 图片绘制在另一张 PGF 图片前面?](https://linux22.com/image/458759/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%80%E5%BC%A0%20PGF%20%E5%9B%BE%E7%89%87%E7%BB%98%E5%88%B6%E5%9C%A8%E5%8F%A6%E4%B8%80%E5%BC%A0%20PGF%20%E5%9B%BE%E7%89%87%E5%89%8D%E9%9D%A2%EF%BC%9F.png)
我在文件中保存了以下 LaTeX 代码~\Test.tex
。
\documentclass{beamer}
\usepackage{tikz}
\usetheme{Warsaw}
\begin{document}
\begin{frame}{Frame Title}
\begin{tikzpicture}
\draw[fill,red](0,0)rectangle(\textwidth,\textheight);
\draw[fill,orange](0,0)circle(2pt);
\draw[fill,orange](\textwidth,\textheight)circle(2pt);
\end{tikzpicture}
\end{frame}
\end{document}
代码创建了一个主题为华沙的投影仪演示文稿。(华沙主题为每个框架添加了页眉和页脚。)演示文稿由一个常规框架组成。框架的内容由一个对象组成:一张 TikZ 图片。图片由三个元素组成:一个宽度为\textwidth
、高度为的红色填充矩形\textheight
,以及红色矩形左下角和右上角的两个橙色填充圆圈。
然后我在终端中执行了以下命令。
> cd ~
> lualatex Test
> lualatex Test
编译结束时~/Test.log
不包含任何重新运行编译的指令。编译导致创建文件~/Test.pdf
。在 PDF 查看器中打开时,文件显示如下。
可以看出,红色矩形右上角的橙色圆圈可见,但左下角的圆圈不可见。这表明红色矩形的一部分隐藏在黑色和蓝色页脚后面。
问题
答案1
如果您想在所有内容的顶部打印某些内容,则必须将其添加到页脚之后。例如,您可以使用 shipout/foreground 钩子。计算尺寸时,请注意\textheight
beamer 中的尺寸比您预期的要大得多。它实际上会下降到框架的底部。
\documentclass{beamer}
\usepackage{tikz}
\usetheme{Warsaw}
\begin{document}
\makeatletter
\AddToHook{shipout/foreground}{%
\put(1cm,-\paperheight){%
\begin{tikzpicture}
\draw[fill,red,use as bounding box](0,0)rectangle(\textwidth,\paperheight);
\draw[fill,orange](0,0)circle(2pt);
\draw[fill,orange](\textwidth,\paperheight)circle(2pt);
\draw[<->,green,line width=3pt](-2pt,0)--++(0,\textheight);
\end{tikzpicture}}
}
\begin{frame}[t]{Frame Title}
\mbox{}
\end{frame}
\end{document}
答案2
我想建议一个变化Ulrike Fischer 的回答。变体避免了该\put
命令,而是将 TikZ 图片的元素相对于current page
伪节点进行定位。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{calc,math}
\usetheme{Warsaw}
\begin{document}
\AddToHook{shipout/foreground}{%
\begin{tikzpicture}[remember picture, overlay]
\tikzmath{
coordinate \origin;
\origin = (current page.south west) + (1,0);
}
\draw[fill,red](\origin)rectangle++(\textwidth,\paperheight);
\draw[fill,orange](\origin)circle(2pt);
\draw[fill,orange]($(\origin)+(\textwidth,\paperheight)$)circle(2pt);
\draw[<->,green,line width=3pt]($(\origin)+(-2pt,0)$)--++(0,\textheight);
\end{tikzpicture}%
}
\begin{frame}{Frame Title}
\end{frame}
\end{document}
两种情况下的输出是相同的:
答案3
如果您查看 Beamer 用户指南的图 1,您会看到脚注线被绘制为 Beamer 框架的最顶层。如果您不想让它覆盖框架内容,您可以使用更下面的层来显示脚注线。
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{tikz}
\setbeamertemplate{footline}{\vskip3.625ex}
\makeatletter
\setbeamertemplate{sidebar canvas left}
{%
\tiny%
\leavevmode%
\hbox{%
\rule{0pt}{\dimexpr\paperheight-1.125ex}%
\hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm plus1fill,rightskip=.3cm]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle\nobreak\hfill\usebeamercolor[fg]{page number in head/foot}\usebeamerfont{page number in head/foot}\usebeamertemplate{page number in head/foot}
\end{beamercolorbox}}}%
\vskip0pt%
}
\makeatother
\begin{document}
\begin{frame}{Frame Title}
\begin{tikzpicture}
\draw[fill,red](0,0)rectangle(\textwidth,\textheight);
\draw[fill,orange](0,0)circle(2pt);
\draw[fill,orange](\textwidth,\textheight)circle(2pt);
\end{tikzpicture}
\end{frame}
\end{document}