背景

背景

背景

破傷號破折号(pòzhéhào)是中文排版中使用的标点符号。它的用法与西方的破折号非常相似。中文破折号有两个重要特点:

  1. 它占据与两个表意字符相同的宽度。
  2. 它与表意字符全角框的垂直中心对齐。

---在 LaTeX 中,输入三个连续的 ASCII 连字符(三个')即可轻松访问西式破折号 U+002D。在 XeLaTeX 和 LuaLaTeX 中,访问中文破折号的最常见方式是输入两个连续的“西式破折号”  ——(两个U+2014',大多数中文都是这样做的输入法编辑器)。

由于历史原因,西方的破折号和一半的中文破折号共享相同的unicode  U+2014,但它们的长度和垂直位置通常不同。背后的团队思源黑体来源宋体在设计阶段解决了这个问题(例如,这次讨论在 GitHub 上)。借助 OpenType 功能 ,只需键入 fwid即可获得全宽输出。U+2015U+2014

问题

根据 Will Robertson 的回应这次讨论,OpenType 功能 ccmp应该默认启用。这意味着两个U+2014应该能够连接成一个U+2E3A(两个破折号),而三个U+2014应该能够连接成一个U+2E3B(三个破折号)。

更新:然而,ccmp使用时似乎忽略了说明思源黑体或思源衬线。我将使用 Source Han Serif 演示该问题。请注意,该类ctexart加载fontspecxeCJK

% !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 中输入中文破折号

相关内容