如何使文本右对齐的环境?

如何使文本右对齐的环境?

在我的文档中,有一系列短篇小说,每篇小说的结尾都有一个日期。我想为这些日期创建一个环境,该环境将(目前)右对齐它们,但可能会执行其他操作(可能是将它们斜体化,或更改其字体)。这就是我不只是使用的原因flushright

我尝试将该环境定义为:

\newenvironment{故事日期} {\raggedleft}{}

然而这并没有什么作用,至少它没有在该环境中右对齐文本。

为什么这没有起到效果呢?

毕竟,放在\raggedleft段落前面会使其右对齐(以及其后面的段落)。

答案1

很可能您不需要环境,而只需要一个命令。

\newcommand{\storydate}[1]{%
  \par                   % ensure vertical mode
  \nopagebreak           % we want no page break
  \vspace{\medskipamount}% some vertical space
  \hspace*{\fill}%       % fill the line
  \textit{#1}%           % the date
  \par                   % end the new paragraph
}

完整示例。

\documentclass{article}

\usepackage{lipsum} % for interesting short stories

\newcommand{\storydate}[1]{%
  \par                   % ensure vertical mode
  \nopagebreak           % we want no page break
  \vspace{\medskipamount}% some vertical space
  \hspace*{\fill}%       % fill the line
  \textit{#1}%           % the date
  \par                   % end the new paragraph
}

\begin{document}

\section*{A nice story}

\lipsum[1-3]

\storydate{February 4, 2018}

\end{document}

在此处输入图片描述

您的方法\raggedleft也可以,但您应该这样做

\newenvironment{storydate}{\par\raggedleft}{\par}

这样环境发起的组就不会在 TeX 拆分(单行)段落之前结束。然而,这会导致在故事结尾和日期之间出现分页符。请参阅\nopagebreak上面代码中的项目。\par前面的\raggedleft确保在日期排版之前将故事的最后一段拆分成行。

答案2

一个简单的命令就可以完成:

\documentclass[12pt,a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ebgaramond}
\usepackage[showframe]{geometry}
\usepackage{lipsum}
\newcommand{\storydate}[1]{\par\noindent\makebox[\linewidth][r]{\itshape#1}\bigskip\par}

\begin{document}

\lipsum[1]
\storydate{\today}
\lipsum[2]

\end{document} 

在此处输入图片描述

相关内容