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