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}