我遇到了以下问题。我想将列表居中,我尝试了这种方法:如何使列表居中?
它能工作,但是当我尝试为每个列表专门设置框架或数字时,我收到错误。以下是 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
),因此不需要考虑将它们居中。