我收到了精彩评论如何使列表居中:
\documentclass[a4paper]{book}
%\usepackage[hang,small,it,hypcap=true]{caption} % screw hypcap
\usepackage[T1]{fontenc}
\usepackage{fancyvrb}
\usepackage{listings}
\lstset{
fancyvrb=true,%
}
\usepackage{varwidth}
\lstset{
basicstyle=\linespread{0.94}\ttfamily,%
fancyvrb=true,%
captionpos=b
}
\begin{document}
\begin{center}\begin{varwidth}{\linewidth}%
\begin{lstlisting}[caption={I want to be centered},label={lst:label2}]
trait Sys[S <: Sys[S]] {
type Tx <: stm.Txn[S]
type Var[A] <: stm.Var[S#Tx, A]
type ID <: stm.Identifier[S#Tx]
type Acc
...
}
\end{lstlisting}\end{varwidth}
\end{center}
\end{document}
到目前为止,一切都很好:
如果我添加caption
包(在上面的例子中取消注释),我必须做因为很多东西都依赖于它,所以中心位置被破坏了:
我还发现添加showframe
包也有同样的问题,所以罪魁祸首可能是center
或varwidth
而不是caption
。如何解决这个问题?
答案1
varwidth
无法处理任意内容,您会收到警告
Package varwidth Warning: Failed to reprocess entire contents
在这些情况下,环境就变成了minipage
具有指定宽度的简单环境。你可以在环境外使用标题lstlisting
:
\documentclass[a4paper]{book}
\usepackage[T1]{fontenc}
\usepackage[
hang,
small,
it,
hypcap=true
]{caption}
\usepackage{fancyvrb}
\usepackage{listings}
\lstset{
fancyvrb=true,
}
\usepackage{varwidth}
\lstset{
basicstyle=\linespread{0.94}\ttfamily,
fancyvrb=true,
captionpos=b
}
\begin{document}
\begin{center}
\begin{varwidth}{\linewidth}
\begin{lstlisting}
trait Sys[S <: Sys[S]] {
type Tx <: stm.Txn[S]
type Var[A] <: stm.Var[S#Tx, A]
type ID <: stm.Identifier[S#Tx]
type Acc
...
}
\end{lstlisting}\end{varwidth}
\captionof{lstlisting}{I want to be centered}\label{lst:label2}
\end{center}
\end{document}
注意列表和标题之间可能出现的分页符。浮动会更好;figure
(带\captionof{lstlisting}
)会很好。
答案2
这是另一个解决方案:
\documentclass[a4paper]{book}
\usepackage[T1]{fontenc}
\usepackage{caption}
\usepackage{fancyvrb}
\usepackage{listings}
\begin{document}
\begin{figure}
\centering
\lstset{xleftmargin=0.18\textwidth,xrightmargin=0.18\textwidth}
\begin{lstlisting}
trait Sys[S <: Sys[S]] {
type Tx <: stm.Txn[S]
type Var[A] <: stm.Var[S#Tx, A]
type ID <: stm.Identifier[S#Tx]
type Acc
...
}
\end{lstlisting}
\captionof{lstlisting}{Type members of the system abstraction}\label{lst:scala_system_decl}
\end{figure}
\end{document}