使用枚举环境中的 tcolorbox 将列表居中

使用枚举环境中的 tcolorbox 将列表居中

我正在尝试lstlisting使用tcolorbox(按照建议)将环境居中这里)。该方法确实可以正常工作,但是在环境中无法按预期呈现,enumerate如下所示:

输出

我尝试了以下操作并进行过多次调整,但没有任何效果。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{enumitem}
\usepackage[most]{tcolorbox}

\newenvironment{code}[1][]{%
    \tcbwritetemp}%
    {\endtcbwritetemp%
    \tcbox[before=\begin{center},after=\end{center}]%
    {\tcbusetemplisting}%
    }%

\begin{document}    
    Start a list:
    \begin{enumerate}[label = \textbf{--}]
        \item Inside enumerate not working.
\begin{code}
if(x == 0){
    return 0;
}else{
    return 1;
}\end{code}
    \end{enumerate}
    This is what I want to achieve inside enumerate environment
\begin{code}
if(x == 0){
    return 0;
}else{
    return 1;
}
\end{code}
\end{document}

我怎样才能实现期望的输出大致保持所用逻辑的相同大纲?

答案1

lstlisting在 中调用,在列表环境中使用时,\tcbox使用当前总左边距 ( ) 相应地缩进列表。当您直接在列表环境中使用时,此方法效果很好,但在 中失败。发生这种情况似乎是因为已经缩进框并再次缩进代码。对我来说,这看起来像是包中的一个错误。\@totalleftmarginlstlisting\tcbox\tcboxlstlistingtcolorbox

一个简单的修复方法是在环境中重置\@totalleftmargin0pt本地code

\makeatletter
\newenvironment{code}[1][]{%
    \@totalleftmargin=0pt%
    \tcbwritetemp}%
    {\endtcbwritetemp%
    \tcbox[before=\begin{center},after=\end{center}]%
    {\tcbusetemplisting}%
    }%
\makeatother

给出所需的输出

在此处输入图片描述

相关内容