使用 \raggedleft、\centering 或 \raggedright 进行不必要的换行

使用 \raggedleft、\centering 或 \raggedright 进行不必要的换行

10pt在以下示例中,文本“Dest-Addr”出现了不需要的换行符。文本“Hello-World”的结果是正确的。如果我将字体大小更改为或,结果也是正确的12pt

\documentclass[11pt]{article}
\parindent=0pt
\begin{document}

\setbox0=\hbox{Hello-World}
\setbox2=\vbox{\hsize=\wd0 Hello-World} \box2
\setbox2=\vbox{\hsize=\wd0 \raggedright Hello-World} \box2
\setbox2=\vbox{\hsize=\wd0 \centering Hello-World}   \box2
\setbox2=\vbox{\hsize=\wd0 \raggedleft Hello-World}  \box2

\setbox0=\hbox{Dest-Addr}
\setbox2=\vbox{\hsize=\wd0 Dest-Addr} \box2
\setbox2=\vbox{\hsize=\wd0 \raggedright Dest-Addr} \box2
\setbox2=\vbox{\hsize=\wd0 \centering Dest-Addr}   \box2
\setbox2=\vbox{\hsize=\wd0 \raggedleft Dest-Addr}  \box2

\end{document} 

在此处输入图片描述

  1. 这些不需要的换行符从何而来?
  2. 我怎样才能摆脱这些换行符?

我需要使用,\raggedleft因为在我的包中我需要比较并获取几行文本的最小宽度并将它们放在(类似于包)。另外,由于其他原因,我无法将它们放在。\centering\raggedrightvboxvarwidthhbox

答案1

看来这只发生在 xetex 上。

您可以通过将 exhyphenpenalty 设置为最大值来防止连字

\documentclass[11pt]{article}
\parindent=0pt
\begin{document}

\setbox0=\hbox{Hello-World}
\setbox2=\vbox{\hsize=\wd0 Hello-World} \box2
\setbox2=\vbox{\hsize=\wd0 \raggedright Hello-World} \box2
\setbox2=\vbox{\hsize=\wd0 \centering Hello-World}   \box2
\setbox2=\vbox{\hsize=\wd0 \raggedleft Hello-World}  \box2


\setbox0=\hbox{Dest-Addr}
\setbox2=\vbox{\hsize=\wd0 Dest-Addr} \box2
\setbox2=\vbox{\hsize=\wd0 \raggedright \exhyphenpenalty10000 Dest-Addr} \box2
\setbox2=\vbox{\hsize=\wd0 \centering   \exhyphenpenalty10000 Dest-Addr}   \box2
\setbox2=\vbox{\hsize=\wd0 \raggedleft  \exhyphenpenalty10000 Dest-Addr}  \box2



\end{document} 

相关内容