由于某种原因beamerarticle
(但不是纯粹的原因beamer
)破坏了包\action
的宏msc
(使用 TikZ 而不是 PStricks 的开发版本):
该图应如下所示:
此 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
演示中有效。
因此,如果您简单地交换两个包的顺序(并删除的参数noxcolor
)beamerarticle
,该图就可以起作用。
另一种方法是使用 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}