我需要控制我正在编辑的某些文档中普通文本和宏生成的框对象之间的垂直跳跃。由于文体原因,我需要遵守以下规则:
- 如果将盒装对象放置在两个普通文本块之间,
0.2\baselineskip
则应在其上方和下方添加固定的垂直跳跃(例如)。 - 两个连续的框对象之间的跳过应该与框对象和普通文本块之间的跳过相同,即不应该加倍/乘以。
- 如果框位于新段落的开头,则不应在其前添加额外的垂直跳跃。如果框对象出现在新页面的开头,也应遵守相同的规则。
- 不应在带框对象后面的文本块添加缩进。
我尝试了以下非常简单的\simplepic
命令:
\documentclass[a4paper, 12pt, oneside]{book}
% Preamble
% structure settings
\usepackage{calc}
% lipsum
\usepackage{lipsum}
%%%% Single Image macro
\newcommand{\simplepic}[1]
{\vspace{.2\baselineskip}
\par\noindent
\fbox{%
\begin{minipage}[t]{\linewidth-2ex}
#1
\end{minipage}
}
\vspace{-.2\baselineskip}
\par\noindent
}
\begin{document}
\simplepic{\lipsum[1]}
\lipsum[2]
\simplepic{\lipsum[3]}
\lipsum[4]
\lipsum[5]
\simplepic{\lipsum[6]}
\simplepic{\lipsum[7]}
\lipsum[8]
\end{document}
该代码运行得大致良好,因为它可以根据规则 1、3 和 4 产生垂直间距:但是,规则 2 并未得到遵守,因为上述代码的简单运行显示在生成的输出 .pdf 文件的第二页中。 总之,我的问题是:如何控制盒装物体上方或下方的垂直间距,以使其独立于同一类别的其他盒装物体的存在?
答案1
您需要使用\addvspace
(但在段落结束后)。
\documentclass[a4paper, 12pt, oneside]{book}
% Preamble
% structure settings
\usepackage{calc}
% lipsum
\usepackage{lipsum}
%%%% Single Image macro
\newcommand{\simplepicsep}{0.2\baselineskip}
\newcommand{\simplepic}[1]{%
\par
\addvspace{\simplepicsep}
\noindent
\fbox{%
\begin{minipage}[t]{\linewidth-2ex}
#1
\end{minipage}% <--- don't forget this one
}
\par
\addvspace{\simplepicsep}
}
\begin{document}
\simplepic{\lipsum[1]}
\lipsum[2]
\simplepic{\lipsum[3]}
\lipsum[4]
\lipsum[5]
\simplepic{\lipsum[6]}
\simplepic{\lipsum[7]}
\lipsum[8]
\end{document}
我会避免使用结尾的\noindent
, 来开始一个段落。使用环境而不是命令可能会有所帮助,因为内置命令可以区分环境后面是否有空行。