beamerarticle 破坏了 msc 包

beamerarticle 破坏了 msc 包

由于某种原因beamerarticle(但不是纯粹的原因beamer)破坏了包\action的宏msc(使用 TikZ 而不是 PStricks 的开发版本):

损坏的 MSC 图

该图应如下所示:

未断裂的 MSC 图

此 MWE 的代码如下,不同的结果来自对 的行进行注释或取消注释beamerarticle

\documentclass{article}
\usepackage{msc}
%\usepackage[noxcolor]{beamerarticle}

\begin{document}
\begin{figure}
  \centering
  \begin{msc}[msc keyword=]{}
    \drawframe{no}

    \declinst{A}{}{Alice}
    \declinst{B}{}{Bob}

    \mess*{$m$}{A}{B}
    \nextlevel{}

    \mess{$c, t$}{A}{B}
    \action*{Record $A\to B\colon c, t$}{A}
    \nextlevel[3]

    \mess{$c^\prime, t^\prime$}{B}{A}
    \action*{Record $B\to A\colon c^\prime, t^\prime$}{B}

  \end{msc}
  \caption{%
    A sequence diagram illustrating the protocol.
  }\label{ProtocolOverview}
\end{figure}
\end{document}

我的问题是,有人知道可能是什么原因吗?有人能给我一些如何解决这个问题的线索吗?

没有beamerarticle它看起来不错,如果\action*删除线条,它在两种情况下也能正常工作。在用作beamer文档类的幻灯片中,它也运行良好。

答案1

问题是这两个包都定义了一个名为的宏\action,正如您收到的错误消息所示:

! LaTeX Error: Command \action already defined.

发生错误是因为beamerarticle使用\newcommand来定义它。msc.sty另一方面,使用\def来定义\action,并且\def不检查是否已经存在同名的宏,它只是默默地覆盖它。这解释了为什么它在正常beamer演示中有效。

因此,如果您简单地交换两个包的顺序(并删除的参数noxcolorbeamerarticle,该图就可以起作用。

另一种方法是使用 David Carlisle 在如何让一个包与其他包很好地兼容?

代码输出

\documentclass{article}
\usepackage{beamerarticle}
\usepackage{msc}
\begin{document}
\begin{figure}
  \centering
  \begin{msc}[msc keyword=]{}
    \drawframe{no}

    \declinst{A}{}{Alice}
    \declinst{B}{}{Bob}

    \mess*{$m$}{A}{B}
    \nextlevel{}

    \mess{$c, t$}{A}{B}
    \action*{Record $A\to B\colon c, t$}{A}
    \nextlevel[3]

    \mess{$c^\prime, t^\prime$}{B}{A}
    \action*{Record $B\to A\colon c^\prime, t^\prime$}{B}

  \end{msc}
  \caption{%
    A sequence diagram illustrating the protocol.
  }\label{ProtocolOverview}
\end{figure}
\end{document}

相关内容