在投影机中将对象相对于其他对象(或先前设置的锚点)放置的通用工作流程是什么?

在投影机中将对象相对于其他对象(或先前设置的锚点)放置的通用工作流程是什么?

我通常使用 MS Powerpoint智能表格或其他对象来突出显示图片或表格中的特定点,以吸引观众的注意力。想象一下一张技术图纸,我想要一个指向该图纸特定部分的粗箭头。或者指向表格中某个数字的箭头。

因此在 Powerpoint 中我只需使用拖放并将箭头放在我想要的位置,如果我想移动图片我将图片和箭头放在一个组中并将它们一起移动。

我用文本位置将我的对象放在框架上的包:

\usepackage[absolute,overlay]{textpos}

网格应该可以帮助我做到这一点:

\setbeamertemplate{background}[grid][step=10mm]

不幸的是,它从框架的左下角开始, 但textpos 的原点是左上角。这有点烦人,如何才能正确设置网格?即使这样可行,在放置对象时仍然相当麻烦,而且需要多次编译。

现在我编辑我的表格或移动我的图片,繁琐的放置过程又开始了。

以下是 MWE 展示的示例:

\documentclass{beamer}

\usepackage[absolute,overlay]{textpos}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X}

\usepackage{bbding}
\newcommand{\BigArrow}{\scalebox{5}[1]\ArrowBoldRightShort\!}

\setbeamertemplate{background}[grid][step=10mm]
\begin{document}
\begin{frame}

\begin{table}
    \begin{tabularx}{\textwidth}{YYY}
    \toprule
    \textbf{Treatments} & \textbf{Response 1} & \textbf{Response 2}\\
    \midrule
    Treatment 1 & 0.0003262 & 0.512 \\
    Treatment 2 & 0.0015681 & 0.910 \\
    Treatment 3 & 0.0009271 & 0.296 \\
    \bottomrule
    \end{tabularx}
\end{table}

\begin{textblock*}{0mm}(80mm,37.875mm)
      \BigArrow
\end{textblock*}%

\begin{textblock*}{0mm}(106mm,49.5mm)
      \HandLeftUp
\end{textblock*}%

\end{frame}
\end{document}

在此处输入图片描述

如您所见,我实际上想将箭头精确地放置在最后两列的两个顶行元素之间,并让手指指向最后一个数字。但我不想改变表格本身。

我正在寻找类似的东西:

...
Treatment 1 & 0.0003262 \setanchorpoint{1} & 0.512 \\
Treatment 2 & 0.0015681 & 0.910 \\
Treatment 3 & 0.0009271 & 0.296\setanchorpoint{2} \\
...
...
\begin{textblock*}{0mm}(\getanchorpointX{1}+10mm,\getanchorpointY{1}+0mm)
      \BigArrow
\end{textblock*}%

\begin{textblock*}{0mm}(\getanchorpointX{2}+5mm,\getanchorpointY{2}+5mm)
      \HandLeftUp
\end{textblock*}%

那可能吗?

如果不是,您会推荐什么样的通用方法来将物体相对于其他物体放置?

例如,对于表格,我不认为插入“无形的”行和列来插入箭头和手指。不过,将多张重叠的图片分组似乎更可行。


我希望这个问题不要太宽泛。但我对这些可能性非常感兴趣提供给我。这个问题是对我来说,Latex 比 Powerpoint 更好,如果有时间压力,需要在一天内准备好演示文稿,我可能更愿意使用 Powerpoint 来完成工作,但实际上我不想这样做。Latex 的优势太大了。正如你所见,我不是在谈论完美排版在演示中,有时这些肮脏的伎俩是必要的。

Latex 总是给我“一切皆有可能!”印象,那么什么是魔术在这种情况下?


为了进一步说明,我的一张 Powerpoint 演示文稿的幻灯片和我想要放置的对象如本问题所述,用红色标记:

在此处输入图片描述

答案1

环顾 TX.SX,你会发现很多例子\tikzmark

\documentclass{beamer}

\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\usepackage{tikz}

\usepackage{bbding}
\newcommand{\BigArrow}{\scalebox{5}[1]\ArrowBoldRightShort\!}

\setbeamertemplate{background}[grid][step=10mm]

% tikzmark command, for shading over items
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

\begin{document}
\begin{frame}

\begin{table}
    \begin{tabularx}{\textwidth}{YYY}
    \toprule
    \textbf{Treatments} & \textbf{Response 1} & \textbf{Response 2}\\
    \midrule
    Treatment 1 & 0.0003262\tikzmark{a} & \tikzmark{b}0.512 \\
    Treatment 2 & 0.0015681 & 0.910 \\
    Treatment 3 & 0.0009271 & 0.296\tikzmark{c} \\
    \bottomrule
    \end{tabularx}
\end{table}

\begin{tikzpicture}[overlay, remember picture] 
\path (a) -- node[midway, anchor=base] {\BigArrow} (b);
\node[rotate=-15, anchor=west] at (c) {\HandLeftUp};
\end{tikzpicture}

\end{frame}
\end{document}

编译两次上面的代码,你会得到

在此处输入图片描述

对于你的第二个问题,我建议使用 TikZ 在图像上绘图

答案2

是的,存在一个通用的工作流程来将对象相对于另一个对象放置。这个通用的工作流程就是 TeX 本身。你唯一需要做的就是了解 TeX。

例如,您可以创建一个宏\putto{right}{up}{object},将对象相对于当前排版点移动,但排版点不会移动。该宏可以定义为:

\def\putto#1#2#3{\vbox to0pt{\kern-#2\hbox to0pt{\kern#1{#3}\hss}\vss}}

在您的示例中,此类宏的用法如下:

\documentclass{beamer}

\usepackage[absolute,overlay]{textpos}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{Y}{>{\centering\arraybackslash}X}

\usepackage{bbding}
\newcommand{\BigArrow}{\scalebox{5}[1]\ArrowBoldRightShort\!}

\def\putto#1#2#3{\vbox to0pt{\kern-#2\hbox to0pt{\kern#1{#3}\hss}\vss}}

\setbeamertemplate{background}[grid][step=10mm]
\begin{document}
\begin{frame}

\begin{table}
    \begin{tabularx}{\textwidth}{YYY}
    \toprule
    \textbf{Treatments} & \textbf{Response 1} & \textbf{Response 2}\\
    \midrule
    Treatment 1 & 0.0003262\putto{8mm}{3mm}\BigArrow & 0.512 \\
    Treatment 2 & 0.0015681 & 0.910 \\
    Treatment 3 & 0.0009271 & 0.296\putto{2mm}{1.4mm}\HandLeftUp \\
    \bottomrule
    \end{tabularx}
\end{table}   

编辑如果需要将对象的基线保持在当前排版点的位置,当第二个参数是0mm时,我们的宏会稍微复杂一些:

\def\putto#1#2#3{\vbox to0pt{\kern-#2\hbox to0pt{\kern#1\puttoA{#3}\hss}\vss}}
\def\puttoA#1{\setbox0=\hbox{#1}\ht0=0pt\box0 }

相关内容