是否有选项可以定义文本的自定义对齐方式?例如,制作自己的对齐方式\begin{flushright}...\end{flushright}
?
具体来说,我希望文本在只有一行时居中对齐,而在需要多行时(即有换行符时)左对齐。当然,这可以手动完成,但这听起来不太方便。
答案1
\centeredpar
例如,您可以按如下方式定义宏:
\def\centeredpar #1\par{\noindent
\setbox0 =\vbox{\noindent #1\par
\expandafter}\ifnum\prevgraf=1 \hfil \else \indent \fi
#1\par
}
% test
\centeredpar Short text.
\centeredpar Long text. Sgsh jk k kk fr j ewh ej wwu ye ew gh
hq hhad hj adj, had j dahj.
Sgsh jk k k tuiu iwe huwi tyac hq hhad hj adj, had j dahj.
% text of \centeredpar must be finished by empty line.
段落被排版为工作段落\vbox
,段落行数由\prevgraf
TeX 基元测量。\hfil
基元在实际段落前添加一个粘连。段落结尾由内部 TeX 算法处理,使用与默认\parfillskip
相同的“力”寄存器\hfil
。因此,文本居中。否则\indent
将添加并打印多行段落。\indent
如果您不需要以 开头,则可以省略此宏\indent
。
答案2
受到这里的评论和答案的启发,我编写了使用该environ
包的代码:
\usepackage{environ}
\environbodyname\yourinput
\NewEnviron{autocentredtext}{%
\setbox0=\hbox{\yourinput}
\ifdim\wd0<\textwidth
\begin{center}
\yourinput
\end{center}
\fi
\noindent\yourinput
}%[\ignorespacesafterend]
这将创建一个环境这是由\begin{autocentredtext}...\end{autocentredtext}
哪个首先读取你的文本输入,检查它是否短于\textwidth
,如果是,则居中,否则变为不缩进。
可能需要[\ignorespacesafterend]
在上面的代码末尾添加一些内容来修复一些可能的间距问题。
不幸的是,这似乎不能与一起使用\newenvironment
。例如,
\newenvironment{autocentering}{\begin{autocentredtext}}{\end{autocentredtext}}
会产生错误。如果使用\NewEnviron
而不是\newenvironment
,应该能够克服这个问题。