tcolorbox 在代码框后插入缩进

tcolorbox 在代码框后插入缩进

(注释行稍后会用到,但正如我们在 MWE 中看到的,它们与问题无关)

为什么代码框后面有一个 par 缩进?

在此处输入图片描述

平均能量损失

\documentclass{report}
\usepackage{lipsum}

\usepackage{tcolorbox}
\tcbuselibrary{minted,breakable,xparse,skins}

\DeclareTCBListing{myminted}{O{}m!O{}}{%
  listing only,
  minted language=#2,
  minted options={%
    #1},
  #3}

\begin{document}
\lipsum[2]
\begin{myminted}{R}
p1 = graph_plot(g)
p2 = f_omega_cycle(g)
p1 + p2
\end{myminted}
\lipsum*[2]
\end{document}

答案1

默认情况下,如果您不更改/tcb/before也不更改/tcb/after,则tcolorbox使用/tcb/autoparskip样式,其执行以下操作:

  • 如果长度\parskip大于0pt文档开头的长度,则/tcb/parskip执行样式。

  • 否则,/tcb/noparskip执行。

(看融入周围环境在手册中tcolorbox)。对于您的情况,我们可以使用\showthe\parskipafter进行检查\begin{document},它会在终端上打印以下几行:

> 0.0pt plus 1.0pt.
l.44 \begin{document}\showthe\parskip

当用于比较 〈dimen〉 时,它不会大于0pt(拉伸分量被丢弃)。您可以使用 来验证这一点,这将在输入流中\ifdim\parskip>0pt Y\else N\fi留下。因此,鉴于您的设置,由于您的框既未指定也未指定 ,因此将执行该样式。手册告诉我们,这种样式类似于:N/tcb/before/tcb/after/tcb/noparskiptcolorbox

\tcbset{
  noparskip/.style={
    before={\par\pagebreak[0]\smallskip\parindent=0pt},
    after={\par\smallskip}
  }
}

因此tcolorbox会自动\par\smallskip在框后添加。只要\lipsum*您的环境输出一个框,就会开始一个新段落,并且由于\noindent尚未使用,因此您会得到正常的段落缩进。

如果您不想要这种缩进,您可以在框选项中使用after={\par\smallskip\noindent}或(取决于所需的垂直间距)。after={\par\noindent}

\documentclass{article}
\usepackage{lipsum}

\usepackage{tcolorbox}
\tcbuselibrary{minted,xparse}

\DeclareTCBListing{myminted}{O{}m!O{}}{%
  after={\par\smallskip\noindent},
  listing only,
  minted language=#2,
  minted options={#1},
  #3}

\begin{document}

\lipsum[2]
\begin{myminted}{R}
p1 = graph_plot(g)
p2 = f_omega_cycle(g)
p1 + p2
\end{myminted}
\lipsum*[2]

\end{document}

在此处输入图片描述

答案2

以下使用 LaTeX2e 内部的\@endpetrue,用于在环境指定它(例如)时\end{<env>}使用,如果在之后没有空行则抑制段落缩进,但如果您留下空行则会缩进。\@doendpeitemizemyminted

\documentclass{report}
\usepackage{lipsum}

\usepackage{tcolorbox}
\tcbuselibrary{minted,breakable,xparse,skins}

\makeatletter
\newcommand*\mynoindent
  {%
    \par
    \@endpetrue
  }
\makeatother

%\definecolor{bg}{gray}{0.95}
\DeclareTCBListing{myminted}{O{}m!O{}}{%
%  breakable=true,
%  listing engine=minted,
  listing only,
  minted language=#2,
%  minted style=default,
  minted options={%
%    linenos,
%    gobble=0,
%    breaklines=true,
%    breakafter=,,
%    fontsize=\small,
%    numbersep=8pt,
    #1},
%  boxsep=0pt,
%  left skip=0pt,
%  right skip=0pt,
%  left=25pt,
%  right=0pt,
%  top=3pt,
%  bottom=3pt,
%  arc=5pt,
%  leftrule=0pt,
%  rightrule=0pt,
%  bottomrule=2pt,
%  toprule=2pt,
%  colback=bg,
%  colframe=orange!70,
%  enhanced,
%  overlay={%
%    \begin{tcbclipinterior}
%    \fill[orange!20!white] (frame.south west) rectangle ([xshift=20pt]frame.north west);
%    \end{tcbclipinterior}},
    after={\mynoindent},
  #3}

\begin{document}
\lipsum[2]
\begin{myminted}{R}
p1 = graph_plot(g)
p2 = f_omega_cycle(g)
p1 + p2
\end{myminted}
\lipsum*[2]
\begin{myminted}{R}
p1 = graph_plot(g)
p2 = f_omega_cycle(g)
p1 + p2
\end{myminted}

\lipsum*[2]
\end{document}

示例输出:

在此处输入图片描述

相关内容