我可以在 pdfLaTeX 中定义后备字符吗?

我可以在 pdfLaTeX 中定义后备字符吗?

我的大部分文档都是用 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}

结果

相关内容