自定义文本对齐方式

自定义文本对齐方式

是否有选项可以定义文本的自定义对齐方式?例如,制作自己的对齐方式\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,段落行数由\prevgrafTeX 基元测量。\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,应该能够克服这个问题。

相关内容