您可能知道,在法语字体中,“大”标点符号 ( !?;»
) 前面必须有一个细的不可分割的空格(显然«
后面也必须有一个细的不可分割的空格,并且作为例外,:
前面应该有一个正常的不可分割的空格),例如参见法语http://fvsch.com/articles/espaces-ponctuation/。
以下是一个例子:
扩展使用的解决方案babel
是在每种情况下都使用带有 的正常不可破坏空间~
。
我有三个问题要解决这个问题:
- 的实际定义是什么
~
? - 有没有办法改变这个定义
~
? - 有没有办法强制
babel
使用薄的牢不可破空间!?;«»
和正常的牢不可破空间:
。
感谢您提供任何线索。
答案1
babel
你所断言的反例。正确的根据法语印刷规则,使用空格。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{newunicodechar}
\newunicodechar{«}{\og}
\newunicodechar{»}{\fg}
\begin{document}
Une phrase en français; sans intérêt, avec signes diacritiques:
nous pouvons voir qu'il est correct!
Les \og guillemets\fg{} sont corrects aussi.
Les «guillemets» sont corrects aussi.
\end{document}
;
如您所见,和之前的空格很细!
(对于 也是一样?
),但它们是冒号之前的正常空格。
对于 guillemets 来说,标准方法是使用\og
和\fg
,但可以重新定义«
和»
以获得相同的效果。
\showoutput
使用时日志文件的一些摘录:
....\T1/cmr/m/n/10 f
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 a
....\T1/cmr/m/n/10 n
....\T1/cmr/m/n/10 ?
....\T1/cmr/m/n/10 a
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 s
....\penalty 10000
....\kern 1.6663
....\T1/cmr/m/n/10 ;
[...]
....\T1/cmr/m/n/10 d
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 a
....\T1/cmr/m/n/10 c
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 t
....\T1/cmr/m/n/10 i
....\T1/cmr/m/n/10 q
....\T1/cmr/m/n/10 u
....\T1/cmr/m/n/10 e
....\T1/cmr/m/n/10 s
....\penalty 10000
....\glue 3.33252 plus 1.66626 minus 1.11084
....\T1/cmr/m/n/10 :
....\glue 3.33252 plus 1.66626 minus 1.11084
[...]
....\T1/cmr/m/n/10 c
....\T1/cmr/m/n/10 o
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 r
....\T1/cmr/m/n/10 e
....\T1/cmr/m/n/10 c
....\T1/cmr/m/n/10 t
....\penalty 10000
....\kern 1.6663
....\T1/cmr/m/n/10 !
细空格就是\kern 1.6663
,而冒号周围的两个空格则是正常的词间空格。
如果您想要将冒号前的空格更改为正常的单词间空格而不拉伸(但会收缩)以及打开/关闭格子之前/之后的空格,只需重新定义\FBcolonspace
和\FBguillspace
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{newunicodechar}
\newunicodechar{«}{\og}
\newunicodechar{»}{\fg}
\renewcommand{\FBcolonspace}{\hspace{\fontdimen 2\font minus\fontdimen4\font}}
\renewcommand{\FBguillspace}{\thinspace}
\begin{document}
Une phrase en français; sans intérêt, avec signes diacritiques:
nous pouvons voir qu'il est correct!
\makebox[3cm][s]{Deux: point}
Les \og guillemets\fg{} sont corrects aussi.
Les «guillemets» sont corrects aussi.
\showoutput
\end{document}
添加的冒号示例是故意夸张的。
答案2
(1)的定义~
是
\leavevmode\nobreak\
(2)改变\nobreakspace
定义。
(3) 我不知道如何使用 babel 来做到这一点,但你可以使用它\,
来插入薄的牢不可破的空间。
编辑:打字错误。
答案3
我认为你可以用babel-french
(frenchb)包来做你需要做的事情:http://ctan.org/pkg/babel-french。
答案4
除了 egreg 的出色回应外,我还想补充frenchb
一点babel
此选项:
ThinColonSpace=true (false) changes the inter-word unbreakable space
added before the colon ‘:’ to a thin space, so that the same amount
of space is added before any of the four ‘high punctuation’ characters.
The default setting is supported by the French ‘Imprimerie Nationale’.