如何制作一个位于页面中心的铸造代码列表?

如何制作一个位于页面中心的铸造代码列表?

因此,我正在写一份包含 Prolog 代码列表的报告。我一直在使用列表制作我的列表,并将我的代码放在页面的中心,例如:

\renewcommand{\figurename}{Listing}
\begin{figure}[thp]
 \centering
 \begin{tabular}{c}
  \begin{lstlisting}[language=Prolog]
somePredicate(A, B) :-
    arbitraryPredicate(A),
    anotherPredicate(B).
  \end{lstlisting}
 \end{tabular}
 \caption{My Prolog Predicate}
 \label{lst:firstListing}
\end{figure}

生成的输出:

首次上市

效果很好。这是基于 stackexchange 上的以下答案:https://tex.stackexchange.com/a/5822/46424

不过,我想切换到铸造包来表示我的代码片段,因为它用漂亮的颜色显示代码。这正是问题所在。我已经准备好工作了,但我无法再使我的列表居中。

在网上搜索后,我只发现一个关于对齐铸造代码的问题:LaTeX 对齐铸造的代码片段

因此,正如该问题的答案中所示,我尝试使用迷你页面。然而,这并没有按预期工作。如果我编写以下内容,代码只是左对齐而不是居中:

\renewcommand{\figurename}{Listing}
\begin{figure}[thp]
 \begin{minipage}[t]{\textwidth}
  \centering
  \begin{minted}{prolog}
somePredicate(A, B) :-
    arbitraryPredicate(A),
    anotherPredicate(B).
  \end{minted}
  \caption{My Prolog Predicate}
  \label{lst:firstListing}
 \end{minipage}
\end{figure}

生成的输出:

在此处输入图片描述

我也尝试将 tabular 与 minted 结合起来,但是 pdflatex 出现错误,并且没有生成 pdf 文件。

所以,我的问题是:我如何使由 minted-package 表示的代码列表位于页面的中心?

提前致谢!

答案1

如果你想全部 minted环境居中,并且您不需要将Verbatim环境(由 提供fancyvrb)用于其他目的,那么

\documentclass{article}
\usepackage{lipsum} % just for the example

\usepackage{minted}
\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}

\renewcommand{\figurename}{Listing}

\begin{document}

\lipsum[2]

\begin{figure}[htp]
\centering
\begin{minted}{prolog}
somePredicate(A, B) :-
    arbitraryPredicate(A),
    anotherPredicate(B).
\end{minted}

\caption{My Prolog Predicate}
\label{lst:firstListing}
\end{figure}
\end{document}

相反,如果您想在居中和全宽minted环境之间进行选择,请定义一个cminted环境;定义有点复杂:我们保存一份副本\minted并对其进行修改以\RecustomVerbatimEnvironment在本地发出命令。

\documentclass{article}
\usepackage{lipsum}
\usepackage{minted}
\usepackage{xpatch,letltxmacro}
\LetLtxMacro{\cminted}{\minted}
\let\endcminted\endminted
\xpretocmd{\cminted}{\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}}{}{}

\renewcommand{\figurename}{Listing}

\begin{document}

\lipsum[2]

\begin{figure}[htp]
\centering
\begin{cminted}{prolog}
somePredicate(A, B) :-
    arbitraryPredicate(A),
    anotherPredicate(B).
\end{cminted}

\caption{My Prolog Predicate}
\label{lst:firstListing}
\end{figure}
\end{document}

在此处输入图片描述

答案2

你的迷你页面毫无意义。请按如下方式使用:

\documentclass{article} 
\usepackage{minted}
\begin{document}

\begin{figure}[thp]
\centering 
\begin{minipage}{0.4\textwidth}
\begin{minted}{prolog}
somePredicate(A, B) :-
    arbitraryPredicate(A),
    anotherPredicate(B).
\end{minted}
\end{minipage}
\caption{My Prolog Predicate}\label{lst:firstListing}
\end{figure}

\end{document}

在此处输入图片描述

答案3

@egreg 的回答很棒并且启发了我现在正在做的事情......

\newminted[ccodefig]{c}{fontsize=\footnotesize,linenos}
\xpretocmd{\ccodefig}{\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}}{}{}
\xpretocmd{\ccodefig*}{\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}}{}{}

第一行创建了一个新的 minted 环境,名为ccodefig(我将其读作“c code [for use in] figure[s]”),但您可以随意命名。它还创建了ccodefig*允许选项覆盖您为此命令设置的默认值的环境。

然后我只需按照 egreg 的建议将底层实现从 更改VerbatimBVerbatim

我喜欢这个功能,它让我可以在创建新命令的同时为给定语言设置默认值。然后我只需对其进行修补即可实现水平居中。

相关内容