因此,我正在写一份包含 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 的建议将底层实现从 更改Verbatim
为BVerbatim
。
我喜欢这个功能,它让我可以在创建新命令的同时为给定语言设置默认值。然后我只需对其进行修补即可实现水平居中。