我正在写一篇文章,其中涉及大量图解演算,也就是说,有一张带有节点和线条的大 TikZ 图片,并且该图片在计算的每个步骤中都会发生轻微修改。例如,线条的标签会发生变化,或者线条会变成虚线或消失。
现在我发现自己在想,如果我在写一个 beamer 演示文稿,这会很容易。然后我只需写出整个图片及其所有修改,然后使用覆盖来修改它。例如,我可以用来\visible<...>{...}
在计算的后面部分使一条线消失。请在此处查看我“手工”制作的示例:
但是我有article
文档类,我不想改变它。有没有办法在 a 中使用 beamer 的覆盖规范,tikzpicture
然后得到一个align
环境,其中每条线都是图片的一个覆盖?
编辑:感谢您提出创建单独的 beamer 文件并包含其输出的创造性想法。但我真的不想费力创建外部文件并手动调整边距。这看起来工作量太大,而且麻烦太多,结果看起来并不适合我的目的。我个人宁愿坚持使用 TikZ 样式和 PGF 键来解决这个问题。
编辑 2:找到 Liam 的问题这里问类似的问题,我想重新表述我的问题: 给定我用投影仪叠加规范绘制的图片,有没有办法提取它在帧 $n$ 上的样子?
答案1
您可以使用standalone
带有选项的类beamer
,该选项允许使用所有beamer
叠加构造。这将创建一个包含与叠加层一样多页面的 PDF。可以裁剪这些页面中的每一个,您将获得一个新的 PDF 文件,每个页面都有一个调整后的叠加层。最后,您可以使用includegraphics 选项或最近的库pdfcrop
将它们全部包含在您的文章中。page=
tcolorbox
rater
作为示例,我改编了以下代码:我的答案到使用 tikzpcture 和 beamer 以及 \onslide 一点一点地绘制(揭示)曲线仅消除框架标题:
\documentclass[beamer]{standalone}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{decorations}
% A simple empty decoration, that is used to ignore the last bit of the path
\pgfdeclaredecoration{ignore}{final}
{
\state{final}{}
}
% Declare the actual decoration.
\pgfdeclaremetadecoration{middle}{initial}{
\state{initial}[
width={0pt},
next state=middle
]
{\decoration{moveto}}
\state{middle}[
width={\pgfdecorationsegmentlength*\pgfmetadecoratedpathlength},
next state=final
]
{\decoration{curveto}}
\state{final}
{\decoration{ignore}}
}
% Create a key for easy access to the decoration
\tikzset{middle segment/.style={decoration={middle},decorate, segment length=#1}}
\newcommand{\mypath}{(10,0)(9,-0.1)(8,-0.3)(7,-0.8)(6,-2)(5,-4.5)(4,-5)(3,-3)(2,0)(1.5,1.5)(1.4,1.75)(1.35,2)}
\begin{document}
\begin{frame}{} %<- no title for better cropping
\begin{tikzpicture}
\onslide<5->{\draw[green!20, pattern color =green!20, thin,pattern=north west lines] (0,-5) rectangle (2,2) node[rotate=90,midway,above] {\tiny{\textcolor{green!30!black}{repulsive forces dominant}}};}% drawn first so appear as underlay
\onslide<5->{\draw[red!0, pattern color =red!20, thin,pattern=north west lines] (2,-5) rectangle (10,2) node[midway,above] {\tiny{\textcolor{red!30!black}{attractive forces dominant}}};}
\onslide<1->{\draw[thick,->] (0,0) --(10,0) node[above left=0.2] {\tiny{Separation}};}
\onslide<1->{\draw[thick,->] (0,-5) --(0,2) node[rotate=90, near end,above] {\tiny{Potential Energy}};}
\onslide<2>{\draw[middle segment=0.3,color=blue, thick,-] plot[smooth] coordinates{\mypath};}
\onslide<3>{\draw[middle segment=0.6,color=blue, thick,-] plot[smooth] coordinates{\mypath};}
\onslide<4>{\draw[middle segment=0.8,color=blue, thick,-] plot[smooth] coordinates{\mypath};}
\onslide<5>{\draw[color=blue, thick,-] plot[smooth] coordinates{\mypath};}
\end{tikzpicture}
\end{frame}
\end{document}
结果已被pdfcrop
修改并包含在article
这样的文件中:
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{tcbraster}[raster columns=2, raster equal height]
\tcbincludegraphics[graphics options={page=1}]{214474-crop}
\tcbincludegraphics[graphics options={page=2}]{214474-crop}
\tcbincludegraphics[graphics options={page=3}]{214474-crop}
\tcbincludegraphics[graphics options={page=4}]{214474-crop}
\tcbincludegraphics[graphics options={page=5}]{214474-crop}
\end{tcbraster}
\end{document}
第二版本
这可能更简单。环境\tcbincludepdf{pdffile.pdf}
中的命令tcbraster
包括一页又一页dffile.pdf
。因此,只需使用以下命令即可获得与之前代码相同的结果:
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{tcbraster}[raster columns=2, raster equal height]
\tcbincludepdf{214474-crop.pdf}
\end{tcbraster}
\end{document}
答案2
这是一种可能性,我也发布在这个相关问题。它是一个小型解析器,用于解释 Beamer 样式的叠加规范(形式为\only<->
、\only<a->
、\only<-b>
、\only<a-b>
和 ),\only<a>
并根据宏对其进行测试\slide
。
\documentclass[12pt]{article}
\usepackage{tikz}
\makeatletter
\newcounter{only@begin}%
\newcounter{only@end}%
\def\@only@hyphen{-}%
\def\only<#1>#2{%
\bgroup
\def\only@test{#1}%
\ifx\only@test\@only@hyphen
\c@only@begin=-100\relax
\c@only@end=100\relax
\else
\parseonlybegin\only@relax#1-\endparseonly
\parseonlyend\only@relax#1-\endparseonly
\fi
\advance\c@only@begin by -1\relax
\advance\c@only@end by 1\relax
\ifnum\c@only@begin<\slide\relax
\ifnum\c@only@end>\slide\relax
#2\relax
\fi
\fi
\egroup
}
\def\@only@relax{\only@relax}%
\def\only@striponetoken#1{}%
\def\only@gobblehyphen#1-{#1}
\def\parseonlybegin#1-#2\endparseonly{%
\def\only@test{#1}%
\ifx\only@test\@only@relax
\setcounter{only@begin}{-100}%
\else
\expandafter\c@only@begin\only@striponetoken#1\relax%
\fi
}
\def\parseonlyend#1-#2\endparseonly{%
\def\only@test{#2}%
\ifx\only@test\@empty
% No hyphen in original.
\c@only@end=\c@only@begin%
\else
\ifx\only@test\@only@hyphen
% \only<a->
\setcounter{only@end}{100}%
\else
% \only<a-b> or \only<-b>; #2 contains 'b-'
\expandafter\c@only@end\only@gobblehyphen#2\relax%
\fi
\fi
}
\makeatother
\begin{document}
\def\mypic#1{%
\def\slide{#1}%
\begin{tikzpicture}[every node/.style={anchor=base,circle, draw}]
\draw (0,0) rectangle (6,2);
\node at (1,1) {a};
\only<2->{ \node at (2,1) {b}; }
\only<2-3>{ \node at (3,1) {c}; }
\only<3>{ \node at (4,1) {d}; }
\only<-4>{ \node at (5,1) {e}; }
\end{tikzpicture}%
\par
}
\mypic{1}%
\mypic{2}%
\mypic{3}%
\mypic{4}%
\mypic{5}%
\end{document}
答案3
还没有尝试过tikzpicture
,但是既然你说如果在 beamer 中会很容易,我将使用 beamer 页面作为包含的图形:
主 tex 文件:
\documentclass{article}
\usepackage{amsmath}
\usepackage{graphicx}
\begin{document}
\begin{align}
x &= \fbox{\begin{minipage}[c]{2.5in}{\vspace{0pt}\includegraphics[page=1]{\jobname-beamer.pdf}}\end{minipage}} \\
% Ref: http://texblog.net/latex-archive/graphics/includegraphics-top-align/
&= \fbox{\begin{minipage}[c]{2.5in}{\vspace{0pt}\includegraphics[page=2]{\jobname-beamer.pdf}}\end{minipage}}
\end{align}
\end{document}
与之相关的 beamer 文件为:
\documentclass{beamer}
\geometry{width=2in, height=2in, paperwidth=2in, paperheight=2in}
\setbeamertemplate{navigation symbols}{}
\begin{document}
\begin{frame}
\visible<1->{One}
\visible<2->{Two}
\end{frame}
\end{document}