当我输入时\showthe\frenchspacing
,我得到以下输出:
> \frenchspacing=macro:
->\sfcode `\.1006\sfcode `\?1005\sfcode `\!1004\sfcode `\:1003\sfcode `\;1002\sfcode `\,1001 .
这些数字难道不应该都是 1000 吗?我还用等分别检查了每个空间因子代码,showthe\sfcode.
得到了相同的错误值。当\frenchspacing
不生效时,六个空间因子代码完全正确: 、和.
为3000 ; 为 2000 ; 为 1500 ; 为 1250 。?
!
:
;
,
我正在使用 pdfTeX,版本 3.1415926-1.40.9(MiKTeX 2.7)(预加载格式=latex 2010.12.14)。
答案1
该包加载重新定义为的amsmath
包:amsgen
\frenchspacing
\def\frenchspacing{\sfcode`\.1006\sfcode`\?1005\sfcode`\!1004%
\sfcode`\:1003\sfcode`\;1002\sfcode`\,1001 }
文件中解释了原因生成文件:
进行更改
\frenchspacing
以确保\@addpunct
即使在“法语”间距生效时也能继续正常工作。
您可以在下面的代码中看到重新定义的效果(注释/取消注释这些行以\def\frenchspacing
查看差异):
\documentclass{article}
\makeatletter
\def\@addpunct#1{\ifnum\spacefactor>\@m \else#1\fi}
\def\frenchspacing{\sfcode`\.1006\sfcode`\?1005\sfcode`\!1004 \sfcode`\:1003\sfcode`\;1002\sfcode`\,1001 }
%\def\frenchspacing{\sfcode `\.\@m \sfcode `\?\@m \sfcode `\!\@m \sfcode `\:\@m \sfcode `\;\@m \sfcode `\,\@m}
\makeatother
\frenchspacing
\begin{document}
\texttt{\meaning\frenchspacing}\par
\makeatletter
Title\@addpunct{.} Text\par
Title.\@addpunct{.} Text\par
Title,\@addpunct{.} Text\par
Title?\@addpunct{.} Text\par
Title!\@addpunct{.} Text\par
Title:\@addpunct{.} Text\par
Title;\@addpunct{.} Text\par
\makeatother
\end{document}
\@addpunct
如果命令前面没有标点符号,则命令只会添加其参数,这有利于确保标点符号始终存在,即使用户没有提供标点符号(例如,在内联章节标题中)。如果所有标点符号都等于,则此方法不起作用,因此\sfcodes
将1000
它们amsgen.sty
放到更大的数字中。之所以使用\sfcodes
全部不同而不是全部等于,1001
是为了能够在需要时区分所有标点符号。
答案2
latex.ltx中原始的定义是:
> \frenchspacing=macro:
->\sfcode `\.\@m \sfcode `\?\@m \sfcode `\!\@m \sfcode `\:\@m \sfcode `\;\@m \s
fcode `\,\@m .
l.6 \show\frenchspacing
正如这个最小的例子所示:
\documentclass{article}
\begin{document}
\show\frenchspacing
\end{document}
如果你们不提供最简单的例子,就不可能说出为什么你们认为它不同。