对于测试用例:
\documentclass{article}
\usepackage{ifxetex}
\ifxetex
\usepackage{polyglossia}
\setdefaultlanguage{english}
\defaultfontfeatures{Ligatures={TeX}}
\setmainfont[BoldFont=cmunbx.otf, ItalicFont=cmunti.otf, BoldItalicFont=cmunbi.otf]{cmunrm.otf}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}
\else
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
\fi
\begin{document}
\section{Main}
Euro (€): ^^e2^^82^^ac\par
Heavy Check Mark (U+2714): ^^e2^^9c^^94\par
% ✔
\end{document}
收到错误:
Unicode character ✔ (U+2714) not set up for use with LaTeX. Heavy Check Mark (U+2714): ^^e2^^9c^^94
在构建PDFLaTeX。
这里有很多类似的问题,但即使是最接近的解决方案(pdflatex 输出中的 Unicode 字符使用十六进制代码,无需 UTF-8 输入) 不起作用。如何修复?
使用以下方式构建时没有出现此类错误西拉特克斯(尽管它绘制的字符不正确,所以我们也欢迎提出如何修复它的建议)。
答案1
希望有一个可以与 XeLaTeX 一起编译的文件pdflatex
,但恐怕通常是没希望的。
无论如何,XeLaTeX 不接受诸如此类的输入^^e2^^82^^ac
;实际上它是接受的,但结果似乎不是您所期望的。
您可以设置缺失符号的替换。我还重新定义了 的欧元符号pdflatex
,因为使用欧洲现代符号得到的符号很“有趣”。
\documentclass{article}
% general packages
\usepackage{iftex}
\usepackage{newunicodechar}
% specific packages
\iftutex
% XeLaTeX or LuaLaTeX
\usepackage{polyglossia}
\else
% pdflatex
\usepackage[T1]{fontenc}
\usepackage{pifont,eurosym}
\fi
% settings
\iftutex
% XeLaTeX or LuaLaTeX
\setdefaultlanguage{english}
%\defaultfontfeatures{Ligatures={TeX}}
\setmainfont{cmun}[
Extension=.otf,
UprightFont=*rm,
BoldFont=*bx,
ItalicFont=*ti,
BoldItalicFont=*bi
]
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}
\newfontface{\extrasymbols}{FreeSerif}[Extension=.otf]
\newunicodechar{✔}{{\extrasymbols ✔}}
\else
%\usepackage{textcomp}
%\usepackage[utf8]{inputenc}
\newunicodechar{✔}{\ding{52}}
\newunicodechar{€}{\euro}
\fi
\begin{document}
Euro (U+20AC): €
Heavy Check Mark (U+2714): ✔
\end{document}