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