Existe uma maneira de usar o pacote de listagens junto com o mathpar do mathpartir

Existe uma maneira de usar o pacote de listagens junto com o mathpar do mathpartir

Estou tentando compor uma semântica de pequenos passos para uma linguagem de programação. Meu plano era usar o pacote mathpartir para escrever as regras de inferência e o pacote de listagem para compor os fragmentos da linguagem.

Se eu usar os dois pacotes juntos em um ambiente matemático normal, tudo parece funcionar bem, como mostra o primeiro exemplo da imagem a seguir. No entanto, se eu tentar usar o ambiente mathpar do mathpartir, entãoo resultado é deslocado incorretamente para a direita, como é mostrado no segundo exemplo.

O ambiente mathpartir é muito conveniente porque organiza automaticamente as fórmulas, colocando quantas fórmulas couberem em cada linha.Existe alguma solução alternativa para fazer o módulo de listagens funcionar junto com o mathpar?Caso contrário, existe pelo menos uma maneira de descobrir por que o resultado parece errado? Se isso for um bug nos pacotes, não sei qual pacote seria o culpado.

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}

eu

Responder1

Eu não rastreei tudo, mas como de costume nesses tipos de casos, ajuda definir primeiro o código problemático em uma caixa insira a descrição da imagem aqui

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

Na verdade se for suficiente restaurar localmente \parpara o valor esperado pela listagem (a redefinição não é desfeita então use apenas, como aqui, em 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}

informação relacionada