如何将一张 PGF 图片绘制在另一张 PGF 图片前面?

如何将一张 PGF 图片绘制在另一张 PGF 图片前面?

我在文件中保存了以下 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. 如何在页脚前面绘制红色矩形?
  2. 更一般地说,如何才能将 TikZ 图片绘制在与其重叠的任何其他 TikZ 图片前面,即使不知道哪些 TikZ 图片(如果有的话)实际上与其重叠,或者即使文档中还有任何其他 TikZ 图片?
  3. 更一般地,如何才能将一个 PGF 图绘制在任何其他 PGF 图的前面?(显然beamer主题演示文稿的页脚Warsaw不是 TikZ 图片,而是 PGF 图片。而且,每个 TikZ 图片都是一个 PGF 图片,但反之则不然。)

答案1

如果您想在所有内容的顶部打印某些内容,则必须将其添加到页脚之后。例如,您可以使用 shipout/foreground 钩子。计算尺寸时,请注意\textheightbeamer 中的尺寸比您预期的要大得多。它实际上会下降到框架的底部。

\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}

在此处输入图片描述

相关内容