Есть ли способ использовать пакет листингов вместе с mathpar от mathpartir?

Есть ли способ использовать пакет листингов вместе с mathpar от mathpartir?

Я пытаюсь набрать мелкошаговую семантику для языка программирования. Мой план состоял в том, чтобы использовать пакет mathpartir для написания правил вывода и пакет листинга для набирания фрагментов языка.

Если я использую два пакета вместе в обычной математической среде, все работает нормально, как показано в первом примере на следующем изображении. Однако, если я попытаюсь использовать среду mathpar из mathpartir, торезультат неправильно смещен вправо, как показано во втором примере.

Среда mathpartir очень удобна, поскольку она автоматически организует формулы, помещая столько формул в каждую строку, сколько в нее помещается.Есть ли какой-нибудь обходной путь, позволяющий заставить модуль листингов работать вместе с 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значение, ожидаемое listings (сброс не отменяется, поэтому используйте только, как здесь, в группе):

\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}

Связанный контент