tcblisting 环境后抑制段落缩进?

tcblisting 环境后抑制段落缩进?

tcblisting我正在编写一个包含大量代码片段的文档,并且我已经使用包中的环境tcolorbox来执行此操作。环境运行良好。

但我想要做的是抑制段落缩进,以便

\begin{mycode}
   lots of stuff using my environment
\end{mycode}

which shows that Santa Claus \emph{does} exist,\ldots

具有以下效果不是缩进“这表明...”我知道这个after参数是我在这里需要的;这在手册(针对 v3.12)的第 3.12 节(第 62 页)中有描述tcolorbox。但是,我无法获得我想要的结果;例如after={\par\baselineskip\parindent=0pt}不起作用。

我可以遍历\noindent所有地方并将其放置,但是肯定有办法在环境定义本身中做到这一点吗?

有没有简单的方法可以做到这一点?

答案1

使用after={\par\vspace{\baselineskip}\noindent}然后

\end{code}
which shows that Santa Claus \emph{does} exist,\ldots

(之后没有空行\end{code})或

\end{code}
%
which shows that Santa Claus \emph{does} exist,\ldots

如果您需要该空白以便于阅读。

\documentclass{article}
\usepackage{xcolor}
\usepackage[many]{tcolorbox}
\tcbuselibrary{listings}

\definecolor{light-gray}{gray}{0.95}

\newtcblisting{code}[1][]{
  width=\linewidth,
  enhanced,
  boxrule=0.4pt,
  colback=light-gray,
  listing only,
  top=0pt,
  bottom=0pt,
  listing options={
    basicstyle=\footnotesize\ttfamily,
    language=python,
    showstringspaces=false,
  },
  after={\par\vspace{\baselineskip}\noindent}  %% do you really need \vspace{\baselineskip}?
}

\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\begin{code}
for i in range(n):
    print('i = ', i)
\end{code}
%
which shows that Santa Claus \emph{does} exist,\ldots    

\end{document}

在此处输入图片描述

答案2

有点老了,但我刚刚在另一个上下文中想到了这个问题。您可以尝试这样做来抑制 parindent,即使代码后有一个空行:

\documentclass{article}

\usepackage[many]{tcolorbox}

\makeatletter
\let\@oridoenpe\@doendpe
\def\@newdoendpe{%
     \@endpetrue
     \def\par{\@restorepar\global\let\@doendpe\@oridoenpe
              \clubpenalty\@clubpenalty
              \everypar
               {{\setbox\z@\lastbox}%
                \everypar{}}\par\@endpefalse}%
     \everypar{{\setbox\z@\lastbox}%
                \everypar{}\@restorepar\@endpefalse
               }}

\newcommand\usenewdoendpe{\global\let\@doendpe\@newdoendpe}
\newcommand\useendparenv{\par\@endparenv}
\makeatother

\tcbuselibrary{listings}

\definecolor{light-gray}{gray}{0.95}

\newtcblisting{code}[1][]{
  after={\usenewdoendpe\smallskip\useendparenv}  %% 
}

\begin{document}
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\begin{code}
for i in range(n):
    print('i = ', i)
\end{code}

which shows that Santa Claus \emph{does} exist,\ldots

\begin{code}
for i in range(n):
    print('i = ', i)
\end{code}
which shows that Santa Claus \emph{does} exist,\ldots


\end{document}

在此处输入图片描述

编辑

它不适用于易碎的盒子(即使它们没有破损)。

相关内容