我有一个简单的问题:这是否意味着任何区别在于我是否在某个时候有两个空间而不是一个在源代码中,比如在句号之后?也就是说,在其他所有条件相同的情况下,PdfTeX 是否会用两个代码输出不同的东西,区别在于:
end of. Sentence
对阵
end of. Sentence
我并不是问有与没有的区别\frenchspacing
,我只是对源代码中的多个空格如何解释感兴趣。
答案1
多个连续的空格会被吞噬到代码中的单个空间中,除非它们是硬编码的(例如使用~
或\
- 控制空间 - 或通过\hspace
,或...)。
但是,它的设置可能会有所不同,具体取决于文本行中的其他元素。这是因为随着段落设置的优化,单词间距可能会缩小/拉长。以下是一些示例,希望可以说明这一点:
\documentclass{article}
\begin{document}
% Same end-of-sentence/period
This is text. Some more text.
This is text. Some more text.
This is text. Some more text.
\hrulefill
% Regular space
This is text.\ Some more text.
This is text.~Some more text.
\hrulefill
\medskip
% Stretched inter-word space
\parbox{120pt}{This is text. Some more text.}
\medskip
\parbox{120pt}{This is text.\ Some more text.}
\end{document}
答案2
答案3
答案是:视情况而定。
在正常 TeX 状态下,输入中的连续空格会缩减为单个太空代币。1有关标记以及 TeX 如何从输入文件形成标记的更多信息,请参阅参考线程。接下来,我将区分空格字符(南卡罗来纳州)太空代币(ST):SC 是在输入文件中找到的内容,ST 是在标记化过程中可能由 SC 生成的 TeX 内部对象。
标记化规则的结果是,输入中的连续 SC 要么被简化为单个 ST,要么完全消失(一行中的前导 SC)。因此,诸如
end of. Sentence
end of. Sentence
end of. Sentence
将给出相同的输出,前提是它们是在正常状态下读取的,即当 SC 具有类别代码 10 时。2
警告。在诸如的输入中x {} y
,有不连续的 SC。在正常设置下,这将被标记为
x
11 ST 10{
1}
2 ST 10 y 11
在某些情况下,SC 被赋予不同的类别代码,这当然会改变标记化过程中发生的事情:关于缩减的规则仅有的当 SC 的类别代码为 10 时保持。
原则上,可以为 SC 分配 16 个类别代码中的任意一个;如果分配了类别代码 11 或 12,则 SC 的效果是打印当前字体位置 32 处的字形。以下是简单的纯 TeX 示例
\catcode` =12 abc def ghi\bye
生产
因为cmr10
字体在 32 号位置包含表示 ł 的斜线,即波兰语的“隐藏 l”(在内圈中,该字形被称为斜杠斜杠)。锻炼: 为什么后面没有空格 12
产生一个 lslashslash?
更合理的更改是将 SC 类别代码设为 13(活动)或 9(忽略)。前者是 的情况\obeyspaces
,它包含在逐字输出的设置中。基本上\obeyspaces
就是声明 SC 具有类别代码 13,这样当遇到 SC 时,它将像宏一样运行并根据其当前定义进行扩展。活动 SC 的标准定义是产生 ST 10
% latex.ltx, line 116:
\def\space{ }
% latex.ltx, line 558:
\def\obeyspaces{\catcode`\ \active}
{\obeyspaces\global\let =\space}
(在纯 TeX 中也是一样)。请注意,在执行标记化之后,不再进行缩减:如果 TeX 被输入两个连续的 ST,它将同时使用这两个 ST。这就是为什么输入如下
\verb+x y+
\verb+x y+
\verb+x y+
将分别导致“x”和“y”之间出现一个、两个或三个空格。
类别代码 9(忽略)的 SC 用于expl3
。请参阅我的 TUGboat 论文3