powerdot 和 listings 包之间的冲突

powerdot 和 listings 包之间的冲突

在玩 powerdot 演示文稿时,我发现了一个更尴尬的行为。当listingspackage 生效时, package\onslide的命令powerdot似乎不够强大。

下面是一个最小的例子。这种尴尬可以这样解释:

listings包被加载并且偶数个\onslide命令将覆盖索引定义为一个范围时,最后一个\onslide命令不会产生输出。

有什么可以修复范围定义吗?

\documentclass[mode=present, style=horatio]{powerdot}

\usepackage{listings}

\newcommand{\avf}[1][1]{\pdifsetup{present}{\vspace{\stretch{#1}}}{}}% alternating vertical fill

\begin{document}

\begin{slide}{Sample}\avf
  --
  \onslide*{1-2}{
    ab
  }
  --
  \onslide*{3-4}{
    cd
  }
  --
\avf\end{slide}

\end{document}

答案1

我在写这个问题的时候有了一个想法。(这应该是小黄鸭调试的实际操作。)

据我了解,该\onslide命令会消耗范围定义。在此期间,如果您将内容放入此定义范围内,它将消失。

我首先想到了这个解决方案:

\documentclass[mode=present, style=horatio]{powerdot}

\usepackage{listings}

\newcommand{\avf}[1][1]{\pdifsetup{present}{\vspace{\stretch{#1}}}{}}% alternating vertical fill

\begin{document}

\begin{slide}{Sample}\avf
  \onslide*{0-0}{}
  --
  \onslide*{1-2}{
    ab
  }
  --
  \onslide*{3-4}{
    cd
  }
  --
\avf\end{slide}

\end{document}

在开头定义一个虚拟范围。这可以通过定义一个从第零个覆盖到第零个覆盖且没有内容的范围来实现。这通过使范围定义的数量再次变为奇数来解决问题。但是,您可能不想\onslide每次更新内容时都检查命令的数量。

然后,我想到了一个更好的主意。

\documentclass[mode=present, style=horatio]{powerdot}

\usepackage{listings}

\newcommand{\avf}[1][1]{\pdifsetup{present}{\vspace{\stretch{#1}}}{}}% alternating vertical fill

\begin{document}

\begin{slide}{Sample}\avf
  --
  \onslide*{1-2}{
    ab
  }
  --
  \onslide*{3-4}{
    cd
  }
  --
  \onslide*{5,6}{
    ef
  }
  --
\avf\end{slide}

\end{document}

解决方案是将最终\onslide范围定义为以逗号分隔的覆盖列表。我更愿意选择修改最终范围,因为它修复了所有先前的范围定义(无论是偶数还是奇数)。例如,如果您将第一个范围重新定义为以逗号分隔的列表,则之后您仍可能留下偶数个范围定义。

相关内容