如何正确地使我的文本 \raggedleft?

如何正确地使我的文本 \raggedleft?

byorfrom我使用创建了一个新命令\newcommand{\byorfrom}[1]{\newline\raggedleft\notefontitalic<\,#1\,>},我想让文本从右侧的下一行输出。如下所示: 在此处输入图片描述

但结果是:

The first paragraph.

The second paragraph. \byorfrom{chapter-1}

在此处输入图片描述

第二段不在正确的位置,我的意思是,它从左边开始,就像它之前的第一段一样。如果我在命令定义中再添加一对括号,\newcommand{\byorfrom}[1]{{\newline\raggedleft\notefontitalic<\,#1\,>}}那么示例将是:

在此处输入图片描述 现在文本的位置不对。如果我在as<chapter-1>后面加上那对括号,结果是一样的:\newline\newcommand{\byorfrom}[1]{\newline{\raggedleft\notefontitalic<\,#1\,>}}

在此处输入图片描述

我怎样才能让命令按我希望的方式工作?

答案1

你需要这样的东西:

\def\byorfrom #1{\par {\leftskip=0pt plus1fill\relax #1\par}}

The first paragraph.

The second paragraph. \byorfrom{chapter-1}

该设置\leftskip=0pt plus1fill\relax相当于\raggedleft

您的问题是\raggedleft设置设置了\leftskip,并且其值在处理时使用\par。因此,您必须\par在离开组之前进行处理。您的第二个问题是,您将前一个普通段落与下一个“左对齐”段落用\newline(即 )分开\hfil\break,但这并没有完成前一个段落。如果您希望下一个段落采用不同的格式,则必须用 结束前一个段落\par

答案2

这种\newline方法的问题在于,在一个段落中你不能有不同的指令,所以\raggedleft获胜。

\documentclass{article}
\usepackage[T1]{fontenc}

\newcommand{\byorfrom}[1]{%
  \par\nopagebreak
  {\raggedleft\notefontitalic\textup{\textlangle}#1\/\textup{\textrangle}\par}%
}
\newcommand\notefontitalic{\small\itshape}

\begin{document}

First paragraph

Second paragraph\byorfrom{Chapter 1}

\end{document}

在此处输入图片描述

相关内容