我正在使用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
\lstnewenvironment
LTXexample
LTXexample
\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
。但如果我理解正确的话,它似乎产生了你想要的结果:
当然,您可以根据需要增加或减少空间以匹配aboveskip
。
此解决方案会增加您的序言,但确实解决了您的问题,而无需\vskip
在每个之后手动插入 s LTXexample
。我已经定义了一个新环境,但LTXexample
如果您愿意,您可以自行覆盖。
答案3
然而,另一种方法是在环境之后添加空格,包etoolbox
内容如下
\usepackage{etoolbox}
\AfterEndEnvironment{LTXexample}{\vskip\baselineskip}
scrbook
引发一个警告(显然所使用的钩子etoolbox
已被弃用),但仍可在我的控制台上运行。