Unicode 大括号似乎没有正确的空格因子。考虑以下最小示例 (不是使用法语间距):
\documentclass[12pt]{minimal}
\usepackage[utf8]{inputenc} % Or fontspec with XeLaTeX/LuaLaTeX
\begin{document}
Compare:
``Is the spacing correct?\@'' he asked. % Yes, as it should be
``Is the spacing correct?'' he asked. % No, as it should be
“Is the spacing correct?\@” he asked. % Yes…
“Is the spacing correct?” he asked. % Yes -- but it shouldn’t be
\end{document}
有没有办法——无论是在 PDFLaTeX 还是 XeLaTeX/LuaLaTeX 中——为 Unicode 花引号赋予与直引号相同的空间因子(sfcode 0)?
答案1
结束的双引号位于"22
OT1 编码中的位置和"11
T1 编码中的位置。
所以
\sfcode"22=0
或者
\sfcode"11=0
根据所选的编码即可。如果您想要一个独立于编码(OT1 或 T1)设置空间因子代码的魔法,那么
\AtBeginDocument{
\sfcode\csname\encodingdefault\string\textquotedblright\endcsname=0
}
就是你要找的。这是测试文档:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} % Or fontspec with XeLaTeX/LuaLaTeX
\AtBeginDocument{
\sfcode\csname\encodingdefault\string\textquotedblright\endcsname=0
}
\begin{document}
Compare:
``Is the spacing correct?\@'' he asked.
``Is the spacing correct?'' he asked.
“Is the spacing correct?\@” he asked.
“Is the spacing correct?” he asked.
\end{document}
无论有没有该fontenc
线,输出都是相同的。
对于 XeLaTeX/LuaLaTeX,设置\sfcode`”=0
是正确的。
让我们来看看 的情况。在和pdflatex
中找到的定义(在加载 OT1 或 T1 编码时加载)是ts1enc.dfu
t1enc.dfu
\DeclareUnicodeCharacter{201D}{\textquotedblright}
但\textquotedblright
根据编码的不同,其含义会发生变化。对于 OT1,它是“排版位置为 的字符"22
”,相当于\"
;但对于 T1,它是位置为 的字符"11
。这可以通过以下方式声明
\sfcode`\^^Q=0
但必须给出不同的定义,这很不方便。幸运的是,这个神秘的指令
\sfcode\csname\encodingdefault\string\textquotedblright\endcsname=0
精确访问\OT1\textquotedblright
或\T1\textquotedblright
,这是右插槽的符号名称,取决于默认编码。
答案2
是的,我编辑的命令找到\sfcode
了答案的一半。在 XeLaTeX/LuaLaTeX 下,花括号字符”
可以像任何其他字符一样设置其空间因子代码。在 PDFLaTex 下,U+201D”
重定向到直双引号"
,可以设置其 sfcode。
\documentclass[12pt]{minimal}
\usepackage{ifluatex, ifxetex}
\newif\ifmoderntex
\ifluatex \moderntextrue \fi
\ifxetex \moderntextrue \fi
\ifmoderntex
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Constantia}
\sfcode`\”0
\else
\usepackage[utf8]{inputenc}
\sfcode`\"0
\fi
\begin{document}
Compare:
``Is the spacing correct?\@'' he asked. % Yes, correctly
``Is the spacing correct?'' he asked. % No, correctly
“Is the spacing correct?\@” he asked. % Yes, correctly
“Is the spacing correct?” he asked. % No, correctly
\end{document}