Gibt es eine Möglichkeit, das Listings-Paket zusammen mit Mathpar von Mathpartir zu verwenden?

Gibt es eine Möglichkeit, das Listings-Paket zusammen mit Mathpar von Mathpartir zu verwenden?

Ich versuche, eine Small-Step-Semantik für eine Programmiersprache zu setzen. Mein Plan war, das Mathpartir-Paket zum Schreiben der Inferenzregeln und das Listing-Paket zum Setzen der Sprachfragmente zu verwenden.

Wenn ich die beiden Pakete zusammen in einer regulären mathematischen Umgebung verwende, scheint alles einwandfrei zu funktionieren, wie im ersten Beispiel des folgenden Bildes gezeigt wird. Wenn ich jedoch versuche, die mathpar-Umgebung von mathpartir zu verwenden, dannDas Ergebnis wird fälschlicherweise nach rechts verschoben, wie das zweite Beispiel zeigt.

Die Umgebung „mathpartir“ ist sehr praktisch, da sie die Formeln automatisch organisiert, indem sie in jede Zeile so viele Formeln einfügt, wie passen.Gibt es eine Problemumgehung, um das Listings-Modul mit Mathpar zusammenarbeiten zu lassen?Wenn nicht, gibt es dann wenigstens eine Möglichkeit, herauszufinden, warum das Ergebnis falsch aussieht? Wenn dies ein Fehler in den Paketen ist, weiß ich nicht, welches Paket die Schuld trägt.

MWE

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

mwe

Antwort1

Ich habe nicht alles verfolgt, aber wie üblich hilft es in solchen Fällen, den problematischen Code zuerst in eine Box zu setzen Bildbeschreibung hier eingeben

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

Eigentlich reicht es, wenn man \pardie Werte lokal wiederherstellt, wie es die Auflistungen erwarten (das Zurücksetzen wird nicht rückgängig gemacht, also nur wie hier in einer Gruppe verwenden):

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

verwandte Informationen