28

这真让我抓狂。

我想在 LaTeX 中集中一个列表。

3小时后尝试这里的一些代码:

\lstset{ %
    caption=Descriptive Caption Text,
    label=lst:descr_capti_text,
    basicstyle=\ttfamily\footnotesize\bfseries,
    frame=tb,
    linewidth=0.6\textwidth
 }
\centering\begin{tabular}{c}
\begin{lstlisting}
printf("this should be centered!");
\end{lstlisting}
\end{tabular}

这将 lstlisting 放在中心,但不是它的标题,它向右。如果我取出表格,则标题居中,但代码向左!:(

谢谢你。

4

3 回答 3

35

您应该考虑使用xleftmarginxrightmargin(参见texdoc listings第 4.10 章),而不是使用线宽。以下代码在没有任何 center 或 minipage 环境的情况下工作:

\lstset{
  caption=Descriptive Caption Text, 
  basicstyle=\footnotesize, frame=tb,
  xleftmargin=.2\textwidth, xrightmargin=.2\textwidth
}
\begin{lstlisting}
    printf("this should be centered!");
\end{lstlisting}
于 2013-10-11T17:29:07.747 回答
8

您的标题实际上位于列表的中心。您只是使沿着列表顶部和底部的线条变0.6\textwidth长。这使得它看起来好像标题偏离了中心。此外,您\centering不会将列表居中(如果您不缩短下方和上方的行,则可见)。

这应该有效:

\begin{center}
  \lstset{%
    caption=Descriptive Caption Text,
    basicstyle=\ttfamily\footnotesize\bfseries,
    frame=tb
  }
  \begin{lstlisting}
    printf("this should be centered!");
  \end{lstlisting}
\end{center}

你没有解释为什么你希望分隔线很0.6\textwidth长。如果您确实想将列表的宽度设置为该值,那么您的方法不会达到您想要的效果。使用类似 minipage 的东西来设置整个列表的宽度。

begin{minipage}{0.6\textwidth}
  \begin{center}
    \lstset{%
      caption=Descriptive Caption Text,
      basicstyle=\ttfamily\footnotesize\bfseries,
      frame=tb,
    }
    \begin{lstlisting}
      printf("this should be centered!");
    \end{lstlisting}
  \end{center}
\end{minipage}
于 2010-06-24T00:51:41.893 回答
7

实际上,对我有用的是相反的:将 minipage 放在 center 环境中。

于 2011-01-22T15:33:20.317 回答