我正在排版一段德英文本,其中包含一些中文字符。我知道这里经常有人问类似的问题,但没有任何答案能提供任何帮助。我尝试了以下方法:
% Version 1:
\documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
\usepackage{xltxtra,xunicode}
\begin{document}
waijiaquan, 外家拳
neijiaquan, 內家拳
\end{document}
%Version 2
\documentclass{article}
\usepackage{fontspec}
\defaultfontfeatures[FandolSong]{Script=Default}
\usepackage{xeCJK}
\usepackage{xltxtra,xunicode}
\begin{document}
waijiaquan, 外家拳
neijiaquan, 內家拳
\end{document}
% Version 3
\documentclass[fontset=windows]{ctexbook}
\usepackage{fontspec}
\defaultfontfeatures[FandolSong]{Script=Default}
\begin{document}
waijiaquan, 外家拳
neijiaquan, 內家拳
\end{document}
% Version 4
\documentclass{article}
\usepackage[UTF8]{ctex}
\usepackage{CJKutf8}
\AtBeginDvi{\input{zhwinfonts}}
\usepackage[ngerman]{babel}
\begin{document}
\begin{CJK*}{UTF8}{zhsong}
waijiaquan, 外家拳
neijiaquan, 內家拳
\end{CJK*}
\end{document}
我总是收到缺少字体的警告,例如 Fandol 或 SimHei。但是:我在 CTAN 上看到它们包含在 TexLive 和 Miktex 中,我都使用这两个字体。那么这里的基本错误是什么,还剩下哪些选项?
答案1
您的字体缺少该字符。您可以添加命令\tracinglostchars=2
以在控制台上打印警告消息,而不是将其默默打印到.log
文件中。
对于这种多语言文档,只有简短的中文短语,我推荐使用 Babel。此 MWE 适用于 LuaLaTeX。
\documentclass{article}
\tracinglostchars=2 % Warn if a character is missing from the font!
\usepackage[english, ngerman]{babel}
\usepackage{fontspec}
\babelprovide[import=zh-Hans, onchar=ids fonts]{chinese} % Or zh-Hant for Traditional.
\defaultfontfeatures{ Scale=MatchUppercase, Ligatures=TeX }
\babelfont{rm}
[Scale=1.0, Ligatures={Common,Discretionary}]{New Computer Modern Book}
% From: https://www.google.com/get/noto/#serif-hans or https://www.ctan.org/pkg/notocjksc
\babelfont[chinese]{rm}
{Noto Serif CJK SC}
% Set up \babelfont{sf} and \babelfont{tt} here, if needed.
\babeltags{chinese=chinese}
\babeltags{english=english}
\babeltags{ngerman=german}
\begin{document}
waijiaquan, 外家拳
neijiaquan, 內家拳
\end{document}
这将为您提供德语字幕和连字符,但当您开始输入中文时会自动切换。它还允许您使用 、 等切换\textenglish{...}
语言\begin{english}
。
要使文档在 XeLaTeX 上编译,请删除该onchar=ids fonts
选项并将所有中文文本换行\textchinese{外家拳}
。这也与兼容polyglossia
。
该ctex
软件包比 XeCJK 更新,并且也可以在其他引擎上运行,它提供了两种选择不同字体的方式:fontset=
和\setCJKmainfont
(也\setCJKsansfont
和\setCJKmonofont
)。
\documentclass{article}
\tracinglostchars=2 % Warn if a character is missing from the font!
\usepackage[UTF8, fontset=none]{ctex}
% From: https://www.google.com/get/noto/#serif-hans or https://www.ctan.org/pkg/notocjksc
\setCJKmainfont[Scale=MatchUppercase]{Noto Serif CJK SC}
\begin{document}
waijiaquan, 外家拳
neijiaquan, 內家拳
\end{document}
答案2
答案3
如果你可以下载谷歌的Noto Serif CJK 和 Noto Sans CJK 字体系列,您可能想尝试以下版本,标记为“版本 5”,该版本可在 XeLaTeX 和 LuaLaTeX 下运行。Noto Serif CJK TC 字体系列提供 6 种字体粗细(从“Extra Light”到“Black”),Noto Sans CJK TC 字体系列提供 7 种字体粗细(从“Thin”到“Black”)。
% Version 5
\documentclass{article}
\usepackage[english,ngerman]{babel}
\usepackage{fontspec}
\setmainfont{Noto Serif CJK TC}
\setsansfont{Noto Sans CJK TC}[Scale=MatchLowercase]
\begin{document}
Hello World.
waijiaquan, 外家拳.
neijiaquan, 內家拳.
\sffamily
Hello World.
waijiaquan, 外家拳.
neijiaquan, 內家拳.
\end{document}