是否可以在其他文档类中使用投影仪的覆盖规范?

是否可以在其他文档类中使用投影仪的覆盖规范?

我正在写一篇文章,其中涉及大量图解演算,也就是说,有一张带有节点和线条的大 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}

相关内容