减少 Sinput 和 Soutput 之间的空间

减少 Sinput 和 Soutput 之间的空间

我在书籍文档类中使用 Sweave,发现 Sinput 和 Soutput 环境之间的间距非常大。

\documentclass[11pt]{book}
\usepackage{Sweave}
\usepackage{boxedminipage}


\begin{document}


...

\begin{boxedminipage}{1\textwidth}
\begin{Schunk}
\begin{Sinput}
> 3 + 3
\end{Sinput}
\begin{Soutput}
[1] 6
\end{Soutput}
\begin{Sinput}
> 2 * 4
\end{Sinput}
\begin{Soutput}
[1] 8
\end{Soutput}
\begin{Sinput}
> (369 - 1)/6
\end{Sinput}
\begin{Soutput}
[1] 61.33333
\end{Soutput}
\end{Schunk}
\end{boxedminipage}

...
\end{document}

最终结果如下:

在此处输入图片描述

关于如何减少间距,有什么建议吗?

答案1

加载后将以下代码包含到您的文档中Sweave

\newlength{\fancyvrbtopsep}
\newlength{\fancyvrbpartopsep}
\makeatletter
\FV@AddToHook{\FV@ListParameterHook}{\topsep=\fancyvrbtopsep\partopsep=\fancyvrbpartopsep}
\makeatother

现在,您可以使用以下两个长度来控制Sinput和环境周围的间距:Soutput

  • \fancyvrbtopsep
  • \fancyvrbpartopsep

两者在大多数情况下表现得非常相似,更多详细信息可在fancyvrb第 46 页的文档

要消除环境之间的所有额外间距,请使用

\setlength{\fancyvrbtopsep}{0pt}
\setlength{\fancyvrbpartopsep}{0pt}

输出结果

如果想减小间距但不完全移除它,请将\fancyvrbtopsep或设置\fancyvrbpartopsep为所需值,例如\setlength{\fancyvrbtopsep}{3mm}


解释:

Sweave.sty是基于fancyvrb,它使用list来显示其内容并控制边距和间距。(实际上,它有点复杂,因为fancyvrb使用了 LaTeX 内核中重写的代码部分和原始宏调用的混合list。)列表的外观可以通过\topsep\partopsep\itemsep\parsep、 来控制...

在此特殊情况下,只有如上所述的值\topsep和很重要。但是,您不能简单地在前言中设置这些值,因为在创建新列表时,它们会被类特定的默认值(存储在、、... 中)覆盖。\partopsep\@listi\@listii

相反,您必须fancyvrb在进行这些更改之后加入到代码中,这可以通过向中添加必要的代码来完成\FV@ListParameterHook

答案2

Sweave 使用fancyvrb来格式化其代码,因此修复需要更改该包中的垂直空间。由于这不是用户可更改的参数,因此我们需要修补该\FV@ListVSpace命令。我已经使用该etoolbox包完成了此操作,它提供了许多用于修补命令的酷炫工具。

\documentclass{article}
\usepackage{Sweave}
\usepackage{boxedminipage}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\FV@ListVSpace}{\@topsepadd\topsep}{}{}
\makeatother

\begin{document}

\begin{boxedminipage}{1\textwidth}
\begin{Schunk}
\begin{Sinput}
> 3 + 3
\end{Sinput}
\begin{Soutput}
[1] 6
\end{Soutput}
\begin{Sinput}
> 2 * 4
\end{Sinput}
\begin{Soutput}
[1] 8
\end{Soutput}
\begin{Sinput}
> (369 - 1)/6
\end{Sinput}
\begin{Soutput}
[1] 61.33333
\end{Soutput}
\end{Schunk}
\end{boxedminipage}

代码输出

答案3

\documentclass{article}
\usepackage{Sweave}
\usepackage{boxedminipage}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\FV@ListVSpace}{\@topsepadd\topsep}{}{}
\makeatother

\begin{document}

\begin{boxedminipage}{1\textwidth}
\begin{Schunk}
\begin{Sinput}
> 3 + 3
\end{Sinput}
\begin{Soutput}
[1] 6
\end{Soutput}
\begin{Sinput}
> 2 * 4
\end{Sinput}
\begin{Soutput}
[1] 8
\end{Soutput}
\begin{Sinput}
> (369 - 1)/6
\end{Sinput}
\begin{Soutput}
[1] 61.33333
\end{Soutput}
\end{Schunk}
\end{boxedminipage}

相关内容