在列表后添加空格示例

在列表后添加空格示例

我正在使用showexpl用于创建显示结果的代码的包。对于我使用的示例设置pos=b,将输出以下代码,这就是我想要的。问题是现在我无法在整个示例下方添加空格,因为belowskip似乎总是在代码下方添加空格,所以它现在将代码和输出分开。另一方面,aboveskip工作正常。

这是我的设置的 MWE:

\documentclass[parskip=full]{scrbook}
\usepackage{showexpl,xcolor,lipsum}
\definecolor{light-gray}{gray}{0.95}
\lstset{
explpreset=
{vsep=6pt,pos=b},
basicstyle=\small\ttfamily,
backgroundcolor=\color{light-gray},
xleftmargin=0cm,
numbers=none,
breaklines=true,
breakindent=0pt,
aboveskip=\baselineskip,
%belowskip=\baselineskip,
}

\begin{document}
\lipsum[1]
\begin{LTXexample}
$e^{\pi i}-1=0  $
\end{LTXexample}
\lipsum[2]
\end{document}

我已经注释了产生问题的行。有没有办法在示例后添加空格?我不想在每个 后手动添加空格\end{LTXexample}

编辑:添加parskip=full选项,因为它正在被使用并且它影响问题。

答案1

MWE 中的注释%belowskip=\baselineskip在列表末尾添加了空格,即结果,不是结果;aboveskip=\baselineskip分配有效,因为代码清单之前没有任何内容干扰空间。

我会在环境定义的末尾添加空格LTXexample;但我不会重新定义整个环境,而是会简单地将空格添加到\SX@put@code@result环境末尾调用的宏的定义中。因此,使用LaTeX2e 内核,我会在 MWE\g@addto@macro之前添加以下内容。\begin{document}

\makeatletter
\g@addto@macro{\SX@put@code@result}{\vskip\baselineskip}
\makeatother

这在我的控制台上运行。

答案2

嗯,我不确定你说的“更优雅”是什么意思,但是你有没有考虑过简单的作弊?

(我在这里假设 OP 和评论者已经用尽了该包本身的所有选项;如果有一个包选项可以解决这种情况,那么我在这里提出的解决方案并不理想。)

也就是说,您正在使用,它是通过命令LTXexample定义的。您希望行为与默认环境中的行为不同。所以不要使用;使用非常相似的东西,但它会在底部增加一点空间。showexpl\lstnewenvironmentLTXexampleLTXexample

\documentclass[parskip=full]{scrbook}
\usepackage{showexpl,xcolor,lipsum,listings}
\definecolor{light-gray}{gray}{0.95}
\lstset{
explpreset=
{vsep=6pt,pos=b},
basicstyle=\small\ttfamily,
backgroundcolor=\color{light-gray},
xleftmargin=0cm,
numbers=none,
breaklines=true,
breakindent=0pt,
aboveskip=\baselineskip,
}
\makeatletter
\let\LTXexample\undefined
\let\LTXexample@\undefined
\let\endLTXexample@\undefined
\lstnewenvironment{myLTXexample}[1][]
{%
  \@temptokena{#1}%
  \begingroup
    \advance\c@ltxexample\@ne \advance\c@lstlisting\@ne
    \expandafter\lstset\expandafter{\SX@explpreset,#1}%
    \edef\x{\endgroup
      \def\noexpand\SX@codefile{\SX@codefile}%
      \def\noexpand\SX@graphicname{\SX@graphicname}%
      \def\noexpand\SX@graphicparam{\SX@graphicparam}}%
  \x
  \xdef\SX@@explpreset{\the\@temptokena,codefile=\SX@codefile,
    graphic={[\SX@graphicparam]{\SX@graphicname}}}%
  \setbox\@tempboxa=\hbox\bgroup% Warum noetig?
  \lst@BeginWriteFile{\SX@codefile}%
}
{%
  \lst@EndWriteFile\egroup
  \SX@put@code@result
  \vskip\baselineskip%
}
\makeatother
\begin{document}
\lipsum[1]
\begin{myLTXexample}
$e^{\pi i}-1=0  $
\end{myLTXexample}
\lipsum[2]
\end{document}

这里唯一的新行是\vskip\baselineskip%;其余部分逐字逐句地遵循了的定义LTXexample。但如果我理解正确的话,它似乎产生了你想要的结果:

myLTX示例

当然,您可以根据需要增加或减少空间以匹配aboveskip

此解决方案会增加您的序言,但确实解决了您的问题,而无需\vskip在每个之后手动插入 s LTXexample。我已经定义了一个新环境,但LTXexample如果您愿意,您可以自行覆盖。

答案3

然而,另一种方法是在环境之后添加空格,包etoolbox内容如下

\usepackage{etoolbox}
\AfterEndEnvironment{LTXexample}{\vskip\baselineskip}

scrbook引发一个警告(显然所使用的钩子etoolbox已被弃用),但仍可在我的控制台上运行。

相关内容