
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}
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.
\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 \par
los 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}