我的大部分文档都是用 XeLaTeX 编写的。但有时我需要与不使用 XeLaTeX 的人合作。在这些情况下,我通常可以轻松地添加特定于 pdfLaTeX 的标题:
\ifPDFTeX
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
唯一的问题是unicode字符:
Unicode 字符 ⟨charcode⟩ 未设置为用于 LaTeX
我可以告诉 inputenc 默默地删除这些字符,或者用一个框或一些后备字符替换它们吗?目前我唯一的解决方案是定义
\def\unic#1{\textvisiblespace}
并将所有unicode字符包装在这个宏中以将它们从pdfLaTeX中隐藏起来,这很麻烦。
答案1
宏\UTFviii@defined
检查 UTF-8 字符是否已定义,是否可以重新定义。以下示例用其十六进制数周围的框替换未定义的字符(LaTeX/utf8.def
不应太旧):
\documentclass{article}
\usepackage[utf8]{inputenc}
\makeatletter
\renewcommand*{\UTFviii@defined}[1]{%
\ifx #1\relax
% \PackageError{inputenc}{%
% Unicode\space char\space
% \expandafter\UTFviii@splitcsname\string#1\relax\MessageBreak
% not\space set\space up\space for\space use\space
% with\space LaTeX%
% }\@eha
\noindent
\begingroup
\setlength{\fboxsep}{1pt}%
\setlength{\fboxrule}{.2pt}%
\tiny
\fbox{%
\expandafter\UTFviii@splithex\string#1\relax
}%
\endgroup
\else
\expandafter #1%
\fi
}
\ifx\numexpr\@undefined
\gdef\UTFviii@splithex#1:#2\relax{#2}}
\else
\gdef\UTFviii@splithex#1:#2\relax{%
\expandafter\UTFviii@hexnumber\expandafter{%
\the\numexpr\decode@UTFviii#2\relax
}%
}
\fi
\makeatother
\begin{document}
Euro symbol: €
\end{document}