![在 Beamer 中编程 Tikz](https://linux22.com/image/257184/%E5%9C%A8%20Beamer%20%E4%B8%AD%E7%BC%96%E7%A8%8B%20Tikz.png)
附加的 .Rnw 代码生成了两个类似的幻灯片,但文本和箭头位置不同。我手动编写了这两个幻灯片,但由于我需要制作数百张类似的幻灯片,所以我更愿意只编写一个类型幻灯片,并使用与 R 表相关的变量名来绘制幻灯片。R 表中每行一张幻灯片。如何做到这一点?
更新:Tom Bombadil 给出了一个更好的例子(我用它替换了我的原版)。它是正确的,另外数字和箭头位置的来源来自 R 脚本。这是修改后的版本。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
% Here are the numbers and coordinates that should be different on each slide (one row per slide).
<<input, echo=FALSE>>=
#input.data <- rbind(c(1, 1234, 1965, 3, 4),
#c(2, 5678, 1974, 7, 4))
#colnames(input.data) <- c("SlideNr", "LeftNr", "RightNr", "ArrowPos1", "ArrowPos2")
@
\begin{frame}
\begin{tikzpicture}
\draw (0,0) rectangle (10,4);
\node[above right] at (0,0) {1234};
\node[above left] at (10,0) {1965};
\node[single arrow,shape border rotate=90,fill=white,below,draw] at (3,4) {1.};
\end{tikzpicture}
\end{frame}
\begin{frame}
\begin{tikzpicture}
\draw (0,0) rectangle (10,4);
\node[above right] at (0,0) {5678};
\node[above left] at (10,0) {1974};
\node[single arrow,shape border rotate=90,fill=white,below,draw] at (7,4) {2.};
\end{tikzpicture}
\end{frame}
\end{document}
如何将 R 表中的字段与 Tikz 中的文本或数字“链接”?
更新 2。感谢 Tom 的回复和评论,我意识到我可以在 R 中进行格式化。如果我在 R 中创建此文件 (intext1.tex)(paste("\def\x{",variable,"}",sep="")):
\def\x{1234}
\def\z{3}
和 intext2.tex
\def\x{4321}
\def\z{7}
...然后我可以在 LaTex 中做到这一点:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\foreach \n in {1,...,2} {
\input{intext\n.tex}
\begin{frame}
\begin{tikzpicture}
\draw (0,0) rectangle (10,4);
\node[above right] at (0,0) {\x};
\node[above left] at (10,0) {1965};
\node[single arrow,shape border rotate=90,fill=white,below,draw] at (\z,4) {1.};
\end{tikzpicture}
\end{frame}
}
\end{document}
答案1
您正在寻找这样的东西吗?
代码
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\draw (0,0) rectangle (10,4);
\node[above right] at (0,0) {\only<1>{1234}\only<2>{5678}};
\node[above left] at (10,0) {\only<1>{1965}\only<2>{1974}};
\only<1>{\node[single arrow,shape border rotate=90,fill=white,below,draw] at (3,4) {1.};
}
\only<2>{\node[single arrow,shape border rotate=90,fill=white,below,draw] at (7,4) {2.};
}
\end{tikzpicture}
\end{frame}
\end{document}