请考虑一下:
here is some (great!) text.
由于某些原因,我发现 和 之间的空格比!)
和之间的空格大得多。后者的空格是正常的。前者的空间异常大;它看起来像句子后面(即点后面)的空格。text
some
(
我该如何修复此问题?
答案1
你的观察是正确的:
\documentclass{article}
\showboxdepth=\maxdimen
\showboxbreadth=\maxdimen
\tracingonline=1
\begin{document}
\sbox0{Here is some (great!) text. Another word.}
\usebox0
\scrollmode
\showbox0
\end{document}
包装盒内容:
> \box0=
\hbox(7.5+2.5)x184.1114
.\OT1/cmr/m/n/10 H
.\OT1/cmr/m/n/10 e
.\OT1/cmr/m/n/10 r
.\OT1/cmr/m/n/10 e
.\glue 3.33333 plus 1.66666 minus 1.11111
.\OT1/cmr/m/n/10 i
.\OT1/cmr/m/n/10 s
.\glue 3.33333 plus 1.66666 minus 1.11111
.\OT1/cmr/m/n/10 s
.\OT1/cmr/m/n/10 o
.\OT1/cmr/m/n/10 m
.\OT1/cmr/m/n/10 e
.\glue 3.33333 plus 1.66666 minus 1.11111
.\OT1/cmr/m/n/10 (
.\OT1/cmr/m/n/10 g
.\OT1/cmr/m/n/10 r
.\OT1/cmr/m/n/10 e
.\OT1/cmr/m/n/10 a
.\OT1/cmr/m/n/10 t
.\OT1/cmr/m/n/10 !
.\OT1/cmr/m/n/10 )
.\glue 4.44444 plus 4.99997 minus 0.37036
.\OT1/cmr/m/n/10 t
.\OT1/cmr/m/n/10 e
.\OT1/cmr/m/n/10 x
.\OT1/cmr/m/n/10 t
.\OT1/cmr/m/n/10 .
.\glue 4.44444 plus 4.99997 minus 0.37036
.\OT1/cmr/m/n/10 A
.\OT1/cmr/m/n/10 n
.\OT1/cmr/m/n/10 o
.\OT1/cmr/m/n/10 t
.\OT1/cmr/m/n/10 h
.\OT1/cmr/m/n/10 e
.\OT1/cmr/m/n/10 r
.\glue 3.33333 plus 1.66666 minus 1.11111
.\OT1/cmr/m/n/10 w
.\kern-0.27779
.\OT1/cmr/m/n/10 o
.\OT1/cmr/m/n/10 r
.\OT1/cmr/m/n/10 d
.\OT1/cmr/m/n/10 .
! OK.
l.13 \showbox0
右括号后的空格确实与句号后的空格相同。这由空间因子控制。这在第 20 章:间距Eijkhout 的TeX 按主题分类。
空间系数可以打印在屏幕/.log
文件上:
\typeout{sfcode[t]: \the\sfcode`t}
\typeout{sfcode[!]: \the\sfcode`!}
\typeout{sfcode[)]: \the\sfcode`\)}
空间因素包括:
sfcode[t]: 1000
sfcode[!]: 3000
sfcode[)]: 0
great
空间因子为之后1000
,下面!
将其增加到3000
。但是,关闭)
不会改变空间因子,因为它\sfcode
为零。因此,之后使用较大的空间。
可以通过 来修复\@
。这是一个将空间因子设置为 的宏1000
:
Here is some (great!)\@ text. Another word.
并\showbox
确认:
.\OT1/cmr/m/n/10 !
.\OT1/cmr/m/n/10 )
.\glue 3.33333 plus 1.66666 minus 1.11111
.\OT1/cmr/m/n/10 t
另一种方法是改变的空间因子)
,例如:
\sfcode`\)=1000
但这并不能解决问题,括号里可能包含一整句话。那么就需要更大的空间:
(This is a sentence!) Another sentence follows.