在我的文章中,我想显示繁体中文字符。
我在 Overleaf 在线编辑器中使用以下结构:
\documentclass{article}
\usepackage{CJKutf8}
\usepackage{fontspec}
\setmonofont{Noto Sans Mono CJK TC}
\setmainfont{Noto Sans CJK TC}
\begin{document}
\begin{CJK*}{UTF8}{bsmi}
\textbf{Example 2}
你係老師既學生 (means "You are teacher's student.")
\end{CJK*}
\end{document}
输出如下所示:
你可能会注意到撇号、单引号和双引号后面有一些多余的空格;而且第一个双引号的方向不正确。我以为是字体问题。然后我将其更改为Noto Serif CJK TC
,但问题仍然存在。
我该如何解决这个问题?
答案1
首先,在 LaTeX 中输入引号和撇号的默认方式是:
``You are teacher's student.''
虽然这会将第一个双引号改为左双引号,但间距问题仍然无法通过这种方式解决。出现奇怪间距的原因是,您选择的字体中的相关字形被设计为全宽,以符合 CJK 排版的印刷要求,传统上所有字形(字符和标点符号)都具有相同的宽度。
您可以使用以下代码片段进行检查:
\documentclass{article}
\usepackage{showcharinbox, anyfontsize}
\usepackage{fontspec}
\setmainfont{Noto Sans CJK TC}
\begin{document}
\begin{center}
\ShowCharInBox{\fontsize{200}{210}\selectfont '}
\end{center}
\end{document}
这表明该字体中的撇号字形具有相当宽的边界框:
互联网上有各种版本的 Noto CJK 字体,所以我不知道这是否适合你。不过,GitHub 上可用的字体实际上还提供了另一组非全宽的引号和撇号字形,这些字形可通过 OpenType 功能访问(例如使用\addfontfeatures{CharacterWidth=Proportional}
或):\addfontfeatures{CharacterWidth=Full}
\documentclass{article}
\usepackage{fontspec}
\setmonofont{Noto Sans Mono CJK TC}
\setmainfont{Noto Sans CJK TC}
\begin{document}
\textbf{Example 2} \\
你係老師既學生 (means ``You are teacher's student.")
% set features only for selection
\textbf{Example 2} \\
他說:“你係老師既學生” {\addfontfeatures{CharacterWidth=Proportional} (means ``He says: `You are teacher's student'.")}
% set features globally
\addfontfeatures{CharacterWidth=Proportional}
\textbf{Example 2} \\
你係老師既學生 (means ``You are teacher's student.")
\end{document}
解决这个问题的另一种方法是使用该xeCJK
包(尽管它只适用于 XeLaTeX),它会根据您输入的字符自动选择正确的字体(但是,如果仔细观察,它实际上并不使用全宽字形):
\documentclass{article}
\usepackage{xeCJK}
\setmonofont{Noto Sans Mono}
\setmainfont{Noto Sans}
\setCJKmonofont{Noto Sans Mono CJK TC}
\setCJKmainfont{Noto Sans CJK TC}
\begin{document}
\textbf{Example 2} \\
他說:“你係老師既學生” (means ``He says: `You are teacher's student'.")
\end{document}