我使用fontenc
、fontspec
和xelatex
来加载自定义字体。
\usepackage[T1]{fontenc}
\usepackage{fontspec}
\usepackage[utf8]{inputenc}
\usepackage{xunicode}
\setmainfont[Mapping=Tex-Text]{Warnock Pro}
但是我在使用 时选择字符时遇到了一些问题\char
。\char"201C
与只输入“”不同。 `` 可以正确显示为字形。 但\char"201C
非常类似于\textquotedblleft
(但略有不同)。 也就是说, \char"201C 不属于字体“Warnock Pro”。 此外,如果我只输入“,它也类似于\textquotedblleft
。
如何通过指定自定义加载字体的 \char"xxx 来输出字符?
就是说如果可以的话,我不想用[Mapping=Tex-Text]
,只想直接输入 quote ,或者其他字符,比如 α 。大部分字符都能正确显示。但是有些字符(特别是与 quote 相关的字符)无法正确显示。
--更新 某些字符,例如 ‡ 或 †,无论我输入 † 或 \char"2020,它都不会显示。(无论我是否使用 Mapping=Tex-Text)。我需要添加其他参数吗?
--更新 2 我发现问题是由于我使用了 软件包而发生的\usepackage{xeCJK}
。但是,我需要它分别设置英语/外语。我似乎会让 \char"xxx 显示字体所属\setCJKmainfont
。
按照xeCJK
,char\"201C 应该使用非 CJK 字体。但现在它似乎仍然使用 CJK 字体(即使我使用\xeCJKsetcharclass{"2000}{"2FFF}{0}
)。但如果我关闭 xeCJK(\makexeCJKinactive
那么它就会正确显示)
--更新 3 我添加了以下测试代码。它似乎xeCJK
无法正常工作?
\documentclass[a4paper,10pt]{article}
\usepackage{xeCJK}
\setCJKromanfont{Verdana}
\setromanfont{Times New Roman}
\begin{document}
--\char"201C --``--“--‘‘--\char"60--\textquoteleft\\
%output: verdana--times("60)--verdana--verdana--times--verdana
\setromanfont[Mapping=tex-text]{Times New Roman}
--\char"201C --``--“--‘‘ --\char"60--\textquoteleft\\
% output: verdana, Times ("201C)--verdana--verdana--times("2018)--verdana
\xeCJKsetcharclass{"0}{"2FFF}{0} %same
--\char"201C --``--“--‘‘ --\char"60--\textquoteleft\\
\xeCJKsetcharclass{"0}{"2FFF}{1} %same
--\char"201C --``--“--‘‘ --\char"60--\textquoteleft\\
\makexeCJKinactive %all in roman
--\char"201C --``--“--‘‘ --\char"60--\textquoteleft\\
\end{document}
谢谢你!
答案1
绝不将 inputenc 与 XeLaTeX 或 LuaLaTeX 一起使用。绝不。
该选项实际上是Mapping=tex-text
(但大写似乎也可以),或者更好地使用Ligatures=TeX
,因为这也适用于 lualatex。
我没有您的字体,但 \char"201C 应该可以使用。如果不行,则要么是您在文档的其余部分做了一些奇怪的事情,要么是字体已损坏,要么是您的字体有多个版本。在命令行上使用 `xelatex --output-driver="xdvipdfmx -vv" 编译此文档,然后在终端和日志文件中检查字体的路径。
\XeTeXtracingfonts=1
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Warnock Pro}
\begin{document}
`` ^^^^201c \char"201C
\end{document}