灵活的空间

灵活的空间

我创建了一个宏来插入类似日记的右对齐段落。

\newcommand{\diarydate}[1]{\begin{flushright}\textit{#1}\end{flushright}}

例子:

\diarydate{New York, August 1992}

在此处输入图片描述

这在页面顶部看起来不错,但如果前面有一个段落,那就不行了。因此,如果日记日期文本位于两个段落之间,我想在它前面添加垂直间距,但如果它位于页面顶部或标题之后,则不需要。

是否有一个简单的命令或宏可以涵盖所有这些用例?

答案1

您需要使用分段命令,以确保日记日期和以下文本之间不会出现分页符。例如

\documentclass{article}
\usepackage[pass,showframe]{geometry} % to show the page frame
\usepackage{lipsum}
\makeatletter
\newcounter{diary} % to keep LaTeX happy
\newcommand{\diarymark}[1]{} % ditto
\newcommand\diarydate{%
  \@startsection{diary}%
    {10}%        level for secnumdepth and tocdepth
    {\z@}%       indentation
    {\topsep}%   space before
    {\topsep}%   space below
    {\raggedleft\normalfont\itshape}% format of the text
}
\makeatother
\begin{document}
\lipsum[2]
\diarydate{New York, August 1992}
\lipsum[2]
\section{A section}
\diarydate{New York, August 1992}
\lipsum[2]
\section{B section}
\lipsum[2]
\newpage
\diarydate{New York, August 1992}
\lipsum[2]
\end{document}

\section后跟的空格\diarydate与节标题和普通文本之间的空格相同。

如果你将“空格前”行改为

    {-\topsep}%   space before

之后的第一行将\diarydate不会缩进。我使用它\topsep作为 使用的垂直空间flushright

以下是图片。

第一页

在此处输入图片描述

第二页

在此处输入图片描述


如果您确实想抑制标题后的垂直间距,可以分两步进行:

\makeatletter
\newcounter{diary} % to keep LaTeX happy
\newcommand{\diarymark}[1]{} % ditto
\newcommand\@diarydate{%
  \@startsection{diary}%
    {10}%
    {\z@}%
    {\topsep}%
    {\topsep}%
    {\raggedleft\normalfont\itshape}%
}
\newcommand{\diarydate}{%
  \par % ensure vertical mode
  \if@nobreak % we're after a heading
    \vskip-\lastskip % suppress the space added by the heading
    \vskip-\topsep % suppress the space added by \@diarydate
  \fi
  \@diarydate}
\makeatother

\diarydate并像以前一样使用。

相关内容