使用中心、tcolorbox、列表和枚举的奇怪行为

使用中心、tcolorbox、列表和枚举的奇怪行为

我在编译以下最小示例时遇到问题:

\documentclass{article}
\usepackage{listings}
\usepackage{tcolorbox}

\begin{document}
\begin{center}
    \begin{tcolorbox}
        \begin{lstlisting}
            alert(123);
        \end{lstlisting}

        boom

        \begin{enumerate}
            \item one
            \item two
        \end{enumerate}
    \end{tcolorbox}
\end{center}
\end{document}

我无法减少任何东西,也不知道问题是否出在列表、tcolorbox、枚举或中心。(也许是它们全部在一起)

错误是

! LaTeX Error: Something's wrong--perhaps a missing \item.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.15 ^^I^^I^^I\item o
                     ne

它(像大多数 LaTeX 错误一样)不是很有用……

答案1

除了增加不必要的垂直空间外,这还\begin{center}令人困惑。要么在前面添加,要么按照@PeterGrill 在评论中的建议 更好地使用。tcolorbox\leavevmode\begin{tcolorbox}{\centering.... }

\documentclass{article}
\usepackage{listings}
\usepackage{tcolorbox}

\begin{document}

\begin{center}\leavevmode
\begin{tcolorbox}
    \begin{lstlisting}
        alert(123);
    \end{lstlisting}
    boom
    \begin{enumerate}
        \item one
        \item two
    \end{enumerate}
\end{tcolorbox}
\end{center}

\end{document}

答案2

更新:消除边界。

在我看来,从您对问题的回答来看,您不希望列表位于可见的框中。与 tcolorbox 一样,一切都是可配置的,只需进行设置即可。

  • 使用该skin=empty参数时,什么都不会绘制:所以没有边框(参见第 237 页)。
  • 使用参数lowerbox=ignored不显示框的下部(参见第 24 页)。

因此,也可以设置列表内容和框其余部分之间的距离,但我没有这样做。

第二个盒子

\documentclass{article}
%\usepackage{listings}
\usepackage[most]{tcolorbox}

\begin{document}
\begin{center}
    \begin{tcolorbox}
        \begin{tcblisting}{skin=empty,lowerbox=ignored}
            alert(123);
        \end{tcblisting}

        boom

        \begin{enumerate}
            \item one
            \item two
        \end{enumerate}
    \end{tcolorbox}
\end{center}

\end{document}

旧答案:

可以使用dispListingtcolorboxdocumentation库的环境(参见 4.14 手册第 465 页)。

取消列表

\documentclass{article}
%\usepackage{listings}
\usepackage[most]{tcolorbox}
\tcbuselibrary{documentation}
\begin{document}
\begin{center}
    \begin{tcolorbox}
        \begin{dispListing}
            alert(123);
        \end{dispListing}

        boom

        \begin{enumerate}
            \item one
            \item two
        \end{enumerate}
    \end{tcolorbox}
\end{center}
\end{document}

使用 www.DeepL.com/Translator 翻译

答案3

感谢@AboAmmar、@PeterGrill 和@egreg 设法找出错误根源,即中心环境。

为了使居中,tcolorbox我们可以使用它的center选项:

\documentclass{article}
\usepackage{listings}
\usepackage{tcolorbox}

\begin{document}

\noindent\hrulefill % this rule is added to show that the box is actually centered

    \begin{tcolorbox}[width=0.75\linewidth,center]
        \begin{lstlisting}
            alert(123);
        \end{lstlisting}

        boom

        \begin{enumerate}
            \item one
            \item two
        \end{enumerate}
    \end{tcolorbox}

    \noindent\hrulefill 


\end{document}

在此处输入图片描述

相关内容