如何将列表居中

如何将列表居中

我遇到了以下问题。我想将列表居中,我尝试了这种方法:如何使列表居中?

它能工作,但是当我尝试为每个列表专门设置框架或数字时,我收到错误。以下是 M(Not)WE:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\begin{document}

\begin{figure}[thp]
 \begin{tabular}{c}
  \begin{lstlisting}[numbers=left] % Here lies the problem without the numbers=left it works
   My Code
  \end{lstlisting}
 \end{tabular}
 \centering
 \caption{Bla}
\end{figure}

\end{document}

还有其他方法可以将列表居中吗标题或者我该如何修复这种方法?

答案1

涉及表格的解决方案在这里不起作用,可能是因为lstlisting它本身使用表格或其他类型的表格将数字放在列表中。

因此,这种情况所需的解决方案是将列表的内容保存到一个框中,然后使用该框的宽度来设置 a\parbox或 的大小minipage,并将原始框放入其中。这个新框可以通过通常的方法居中。

问题是lstlisting环境是一个“逐字”的环境,将这种环境放在盒子里会导致一些问题。幸运的是,包提供了为这种情况设计的fancybox环境。Sbox

因此我建议的解决方案是:

\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{fancybox}

\makeatletter
\newenvironment{CenteredBox}{% 
\begin{Sbox}}{% Save the content in a box
\end{Sbox}\centerline{\parbox{\wd\@Sbox}{\TheSbox}}}% And output it centered
\makeatother

\begin{document}

\begin{figure}[thp]
\begin{CenteredBox}
  \begin{lstlisting}[numbers=left]
  My Code
  Another line
  \end{lstlisting}
\end{CenteredBox}
\caption{Bla}
\end{figure}

\noindent X\hrulefill X\par % This is to see the page width

\end{document}

结果

请注意,数字不是框的一部分(它们是用某种 排版的\llap),因此不需要考虑将它们居中。

相关内容