如何在 bussproofs 证明树中显示用 lstlisting 格式化的代码?

如何在 bussproofs 证明树中显示用 lstlisting 格式化的代码?

我希望将格式化为 Java 代码lstlisting作为证明树中的结论bussproofs。代码必须放在框中,以便两个代码片段可以并排显示在同一个结论中。我目前有以下不起作用的代码。它适用于纯文本而不是列表,但看起来很糟糕。我如何将 Java 的列表放入其中?

\documentclass[12pt, twoside]{scrreprt}
\usepackage{listings}
\usepackage{bussproofs}

\begin{document}

\begin{prooftree}
    \AxiomC{more proof}
    \UnaryInfC{
        \parbox{.5\textwidth}{
            \begin{lstlisting}[language=Java]
                //nicely formated code
             \end{lstlisting}
        }
        \parbox{.5\textwidth}{
            \begin{lstlisting}[language=Java]
                //more nicely formated code
            \end{lstlisting}
        }
    }
\end{prooftree}

\end{document}

答案1

在这种情况下,您不能lstlisting在另一个命令的参数中使用\UnaryInfC。通常的技巧是在框中准备列表,并在参数中使用该框:

\documentclass[12pt, twoside]{scrreprt}
\usepackage{listings}
\usepackage{bussproofs}

\newsavebox{\lstA}
\newsavebox{\lstB}

\begin{document}

\begin{prooftree}
\AxiomC{test}
\UnaryInfC{A}{B}
\end{prooftree}

\begin{prooftree}
\begin{lrbox}{\lstA}
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Java]
//nicely formatted code
\end{lstlisting}
\end{minipage}
\end{lrbox}
\begin{lrbox}{\lstB}
\begin{minipage}{.45\textwidth}
\begin{lstlisting}[language=Java]
//different formatted code
\end{lstlisting}
\end{minipage}
\end{lrbox}
    \AxiomC{more proof}
    \UnaryInfC{\usebox{\lstA}}{\usebox{\lstB}}
\end{prooftree}

\end{document}

在此处输入图片描述

相关内容