如何使列表居中?

如何使列表居中?

我正在尝试在作业中获取一些控制台输出。我将其放在列表环境中,但我希望它在页面上水平居中。我唯一居中的是标题 ;-/

\begin{minipage}{1\textwidth}
\begin{center}
\begin{lstlisting}[caption={Ausgabe des C-Programms},label={ggt_c_ausgabe}]
a  |  b  |  q  |  u  |  s  |  v  |  t  
----------------------------------------
78 |  21 |   1 |     |   1 |   1 |  -1 
21 |  15 |   3 |   1 |  -3 |  -1 |   4 
15 |   6 |   1 |  -3 |   4 |   4 |  -5 
 6 |   3 |   2 |   4 | -11 |  -5 |  14 
 3 |     |   2 | -11 |  26 |  14 | -33 
----------------------------------------
\end{lstlisting}
\end{center}
\end{minipage}

答案1

我知道一些奇怪的解决方案,包括将内容临时保存到一个框中,然后确定文本宽度。

最简单的解决方案是使用表格环境:

\begin{center}
\begin{tabular}{c}
\begin{lstlisting}[...]
...
\end{lstlisting}
\end{tabular}
\end{center}

但是,这并不能使标题居中。要使标题在列表上方正确居中,需要另一种解决方案。我们必须将标题从列表环境中移除;这可以通过图形(或另一个浮动环境)来实现。

以下是将列表和标题居中的方法:

\documentclass{article}
\usepackage{listings}
\renewcommand{\figurename}{Listing}
                    % replace figurename with the text that should preceed the caption
\begin{document}

\begin{figure}[thp] % the figure provides the caption
\centering          % which should be centered
\caption{Ausgabe des C-Programms}
\begin{tabular}{c}  % the tabular makes the listing as small as possible and centers it
\begin{lstlisting}[label={gtt_c_ausgabe}]
a  |  b  |  q  |  u  |  s  |  v  |  t
----------------------------------------
78 |  21 |   1 |     |   1 |   1 |  -1
21 |  15 |   3 |   1 |  -3 |  -1 |   4
15 |   6 |   1 |  -3 |   4 |   4 |  -5
 6 |   3 |   2 |   4 | -11 |  -5 |  14
 3 |     |   2 | -11 |  26 |  14 | -33
----------------------------------------
\end{lstlisting}
\end{tabular}
\end{figure}

\end{document}

答案2

仅当以水平模式启动时,包lstlisting才会将内容装箱(这就是它将内容装箱的原因tabular)。

一种解决方案是强制水平模式,但还有设置标题的额外问题,这可以借助来完成\captionof,让 LaTeX 认为这是一个列表而不是一个图形。

为了拥有一个键值接口,我设置了一个新的接口来拦截captionlabel,同时将每个未知选项传递给\lstset。唯一的变化是应该将一个简短的标题指定为和的值,shortcaption而不是

caption=[short caption]{long caption}

格式的listings

\documentclass{article}
\usepackage{showframe} % just for testing
\usepackage{listings,caption,xparse}

\ExplSyntaxOn
\tl_new:N \l_listings_boxed_options_tl
\keys_define:nn { listings/boxed }
 {
  caption .tl_set:N = \l_listings_boxed_caption_tl,
  shortcaption .tl_set:N = \l_listings_boxed_shortcaption_tl,
  label .tl_set:N = \l_listings_boxed_label_tl,
  unknown .code:n =
          \tl_put_right:NV \l_listings_boxed_options_tl \l_keys_key_tl
          \tl_put_right:Nn \l_listings_boxed_options_tl { = #1 , },
 }
\box_new:N \l_listings_boxed_box

\lstnewenvironment{blstlisting}[1][]
 {
  \keys_set:nn { listings/boxed } { #1 }
  \exp_args:NV \lstset \l_listings_boxed_options_tl
  \hbox_set:Nw \l_listings_boxed_box
 }
 {
  \hbox_set_end:
  \cs_set_eq:cc {c@figure} {c@lstlisting}
  \tl_set_eq:NN \figurename \lstlistingname
  \tl_if_empty:NF \l_listings_boxed_caption_tl
   {
    \tl_if_empty:NTF \l_listings_boxed_shortcaption_tl
     {
      \captionof{figure}{\l_listings_boxed_caption_tl}
     }
     {
      \captionof{figure}[\l_listings_boxed_shortcaption_tl]{\l_listings_boxed_caption_tl}
     }
    \tl_if_empty:NF \l_listings_boxed_label_tl { \label{\l_listings_boxed_label_tl} }
   }
  \leavevmode\box_use:N \l_listings_boxed_box
 }
\ExplSyntaxOff

\begin{document}
\begin{center}
\begin{blstlisting}[
  caption=Ausgabe des C-Programms,
  shortcaption=Ausgabe, % just for showing the syntax, it can be omitted
  label=ggt_c_ausgabe,
  basicstyle=\ttfamily, % just for testing the option is correctly passed
]
a  |  b  |  q  |  u  |  s  |  v  |  t  
----------------------------------------
78 |  21 |   1 |     |   1 |   1 |  -1 
21 |  15 |   3 |   1 |  -3 |  -1 |   4 
15 |   6 |   1 |  -3 |   4 |   4 |  -5 
 6 |   3 |   2 |   4 | -11 |  -5 |  14 
 3 |     |   2 | -11 |  26 |  14 | -33 
----------------------------------------
\end{blstlisting}
\end{center}
\end{document}

在此处输入图片描述

相关内容