\frenchspacing 没有正确设置空间因子代码?

\frenchspacing 没有正确设置空间因子代码?

当我输入时\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如果命令前面没有标点符号,则命令只会添加其参数,这有利于确保标点符号始终存在,即使用户没有提供标点符号(例如,在内联章节标题中)。如果所有标点符号都等于,则此方法不起作用,因此\sfcodes1000它们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}

如果你们不提供最简单的例子,就不可能说出为什么你们认为它不同。

相关内容