我在书籍文档类中使用 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}