中心化Latex lstlisting

33

иҝҷзңҹзҡ„и®©жҲ‘з–ҜдәҶгҖӮ

жҲ‘жғіеңЁLaTeXдёӯеұ…дёӯдёҖдёӘlstlistingгҖӮ

з»ҸиҝҮе°қиҜ•дёүдёӘе°Ҹж—¶еҗҺпјҢиҝҷжҳҜжҲ‘зҡ„дёҖдәӣд»Јз Ғпјҡ

\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放在中心但不是它的标题,标题在右边。如果我去掉tabular,那么标题就会居中,但代码会向左移动! :(

谢谢。


4
我想提一下LaTeX StackExchange proposal,因为一旦它开始运作,这将是最适合这种问题的地方。请留意。 - David Z
3个回答

39

建议使用xleftmarginxrightmargin代替linewidth(参见texdoc listings第4.10章)。以下代码无需任何中心或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}

太棒了,这正是我要找的。在我的情况下,我使用负值来设置xrightmargin,以便我可以移动lslisting框架...感谢你的提示! - guipy

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}

1
虽然像Akim一样,我发现它在center环境中使用minipage可以工作。 - luketorjussen
1
很遗憾,这对我不起作用。列表不会移动。 - kaoD
8
对我来说,使用\begin{center}无法使代码清单居中。 - 0__

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接