背景
A 破傷號破折号(pòzhéhào)是中文排版中使用的标点符号。它的用法与西方的破折号非常相似。中文破折号有两个重要特点:
- 它占据与两个表意字符相同的宽度。
- 它与表意字符全角框的垂直中心对齐。
---
在 LaTeX 中,输入三个连续的 ASCII 连字符(三个')即可轻松访问西式破折号 U+002D
。在 XeLaTeX 和 LuaLaTeX 中,访问中文破折号的最常见方式是输入两个连续的“西式破折号” ——
(两个U+2014
',大多数中文都是这样做的输入法编辑器)。
由于历史原因,西方的破折号和一半的中文破折号共享相同的unicode U+2014
,但它们的长度和垂直位置通常不同。背后的团队思源黑体和来源宋体在设计阶段解决了这个问题(例如,这次讨论在 GitHub 上)。借助 OpenType 功能 ,只需键入 fwid
即可获得全宽输出。U+2015
U+2014
问题
根据 Will Robertson 的回应这次讨论,OpenType 功能 ccmp
应该默认启用。这意味着两个U+2014
应该能够连接成一个U+2E3A
(两个破折号),而三个U+2014
应该能够连接成一个U+2E3B
(三个破折号)。
更新:然而,ccmp
使用时似乎忽略了说明思源黑体或思源衬线。我将使用 Source Han Serif 演示该问题。请注意,该类ctexart
加载fontspec
和xeCJK
。
% !TeX program = XeLaTeX
\documentclass[fontset=none]{ctexart}
\setmainfont[Scale=1.1]{TeX Gyre Termes}% Scale=729/662
\setmonofont[Scale=MatchLowercase]{Latin Modern Mono}
% Download SourceHanSerifSC-Regular.otf for this test:
% https://github.com/adobe-fonts/source-han-serif/tree/release/OTF/SimplifiedChinese
\setCJKmainfont[
RawFeature=+ccmp,% This appears to have no effect
RawFeature=+fwid,
]{SourceHanSerifSC-Regular.otf}
\usepackage{array}
\usepackage{booktabs}
\newcommand*\header[1]{\multicolumn{1}{c}{#1}}
\begin{document}
\noindent
\begin{tabular}{l >{\ttfamily}l l l}
\toprule
\header{Input} & \header{Unicode} & \header{Output} & \header{Dash font} \\
\midrule
1 hyphen & 1 U+002D & 英-连字符 & TeX Gyre Termes \\
2 hyphens & 2 U+002Ds & 英--连接号 & TeX Gyre Termes \\
3 hyphens & 3 U+002Ds & 英---破折号 & TeX Gyre Termes \\
\multicolumn{4}{c}{%
\begin{minipage}[t]{0.9\textwidth}
\footnotesize
As expected, two \texttt{U+002D}'s produce an en dash (\texttt{U+2013}),
while three an em dash (\texttt{U+2014}),
all in TeX Gyre Termes.\par
\end{minipage}} \\
\cmidrule{1-4}
1 em dash & 1 U+2014 & 中—半破折号 & Source Han Serif \\
hspace of 1 ccwd & N/A & 中\hspace{\ccwd}半破折号 & \texttt{N/A} \\
2 em dashes & 2 U+2014s & 中——破折号\ ? & Source Han Serif \\
1 two-em dash & 1 U+2E3A & 中⸺破折号 & Source Han Serif \\
hspace of 2 ccwds & N/A & 中\hspace{2\ccwd}破折号 & \texttt{N/A} \\
3 em dashes & 3 U+2014s & 中———符号\ ? & Source Han Serif \\
1 three-em dash & 1 U+2E3B & 中⸻符号\ ? & \texttt{N/A} \\
hspace of 3 ccwds & N/A & 中\hspace{3\ccwd}符号 & \texttt{N/A} \\
\multicolumn{4}{c}{%
\begin{minipage}[t]{0.9\textwidth}
\footnotesize
Under the \texttt{fwid} feature, a~\texttt{U+2014} will be rendered as a~\texttt{U+2015}.
However, two~\texttt{U+2014}'s fail to join as a~\texttt{U+2E3A},
while three~\texttt{U+2014}'s fail to join as a~\texttt{U+2E3B}.
Furthermore, the symbol~\texttt{U+2E3B} cannot be rendered.\par
\end{minipage}} \\
\bottomrule
\end{tabular}
\end{document}
此测试表明, U+2014
无法组合 ' 以产生所需的单个字形。前两个 ?
点:内容的宽度较短,您实际上可以看到单独的 U+2014
' 之间的连接。此外,符号 U+2E3B
根本没有显示(第三个 ?
点)。
更新:如果注释掉行RawFeature=+fwid,
,则在 Source Han Serif(西文标点符号)中,输入 U+2014
或 U+2E3A
分别会生成一个长划线或两个长划线 pwid
。但上述问题仍然存在:两个 U+2014
不能变成 U+2E3A
;三个 U+2014
不能变成 U+2E3B
;并且U+2E3B
无法呈现。
我很乐意TeX 环流' 连字符、短划线和长划线通过 -
,--
和 ---
(全部使用 ASCII 连字符U+002D
)。我的目标是来源韩的破折号、两破折号和三破折号通过 —
,——
和 ———
(全部在 U+2014
,全宽或比例宽度取决于 fwid
或 pwid
)。
有没有什么解决方法?
相关文章:如何在 XeLaTex 中输入中文破折号