有没有办法将 listing 包与 mathpartir 的 mathpar 一起使用

有没有办法将 listing 包与 mathpartir 的 mathpar 一起使用

我正在尝试为一种编程语言排版小步语义。我的计划是使用 mathpartir 包来编写推理规则,并使用 listing 包来排版语言片段。

如果我在常规数学环境中一起使用这两个包,一切似乎都运行正常,如下图第一个示例所示。但是,如果我尝试使用 mathpartir 中的 mathpar 环境,那么结果错误地向右移动,如第二个例子所示。

mathpartir 环境非常方便,因为它会自动组织公式,在每行上放置尽可能多的公式。是否有一些解决方法可以让 listings 模块与 mathpar 一起工作?如果没有,至少有一种方法可以让我弄清楚为什么结果看起来不对?如果这是软件包中的错误,我不知道应该归咎于哪个软件包。

平均能量损失

\documentclass{article}
\usepackage{mathpartir}
\usepackage{listings}

\lstset{
  % without this the \hbox is not strictly necessary
  basicstyle={\ttfamily},
}

\begin{document}
% Works fine:
\[
  \infer{A \hbox{\lstinline!a!} A}{B \hbox{\lstinline!a!} B}
\]
% Weird shift:
\begin{mathpar}
  \infer{A \hbox{\lstinline!a!} A}{B \hbox{\lstinline!a!} B}
\end{mathpar}
\end{document}

姆韦

答案1

我没有追踪所有情况,但像往常一样,在这种情况下,先将有问题的代码放在一个框中会有所帮助 在此处输入图片描述

\documentclass{article}
\usepackage{mathpartir}
\usepackage{listings}

\lstset{
  % without this the \hbox is not strictly necessary
  basicstyle={\ttfamily},
}

\begin{document}
% Works fine:
\[
  \infer{A \hbox{\lstinline!a!} A}{B \hbox{\lstinline!a!} B}
\]
% Weird shift:
\newbox\bA
\setbox\bA\hbox{\lstinline!a!}
\begin{mathpar}
  \infer{A \usebox\bA{} B}{A \usebox\bA{} B}
\end{mathpar}
\end{document}

实际上,如果足以在本地恢复\par到列表预期的值(重置不会被撤消,因此只能在组中使用,就像这里一样):

\documentclass{article}
\usepackage{mathpartir}
\usepackage{listings}

\lstset{
  % without this the \hbox is not strictly necessary
  basicstyle={\ttfamily},
}

\begin{document}
% Works fine:
\[
  \infer{A \hbox{\lstinline!a!} A}{B \hbox{\lstinline!a!} B}
\]
% Weird shift:
\newcommand\zlstinline{\let\par\endgraf\lstinline}
\begin{mathpar}
  \infer{A \hbox{\zlstinline!a!} B}{A \hbox{\zlstinline!a!} B}
\end{mathpar}
\end{document}

相关内容