¿Hay alguna manera de utilizar el paquete de listados junto con mathpar de mathpartir?

¿Hay alguna manera de utilizar el paquete de listados junto con mathpar de mathpartir?

Estoy intentando componer una semántica de pequeños pasos para un lenguaje de programación. Mi plan era utilizar el paquete mathpartir para escribir las reglas de inferencia y el paquete de listado para componer los fragmentos del lenguaje.

Si uso los dos paquetes juntos en un entorno matemático normal, todo parece funcionar bien, como se muestra en el primer ejemplo de la siguiente imagen. Sin embargo, si intento utilizar el entorno mathpar de mathpartir, entoncesel resultado está incorrectamente desplazado hacia la derecha, como se muestra en el segundo ejemplo.

El entorno mathpartir es muy conveniente porque organiza automáticamente las fórmulas poniendo tantas fórmulas en cada línea como quepan.¿Existe alguna solución para que el módulo de listados funcione junto con mathpar?Si no es así, ¿hay al menos alguna manera de descubrir por qué el resultado parece incorrecto? Si se trata de un error en los paquetes, no sé qué paquete sería el culpable.

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

Respuesta1

No lo rastreé todo pero, como es habitual en este tipo de casos, es útil establecer primero el código problemático en un cuadro. ingrese la descripción de la imagen aquí

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

En realidad, si es suficiente restaurar localmente \parlos listados de valores esperados (el restablecimiento no se deshace, así que solo use, como aquí, en un grupo):

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

información relacionada