在 (dvi)latex 和 latin1 输入中输入单个 unicode 代码点

在 (dvi)latex 和 latin1 输入中输入单个 unicode 代码点

由于各种原因,我只能使用 (dvi)latex 和 inputencoding latin1。我仍然想输入 unicode 代码点(我已经准备好十六进制/十进制数字了)。

我见过https://tex.stackexchange.com/a/32514/24158但这对我来说似乎不起作用:

\documentclass{article}
\usepackage[latin1]{inputenc}
\begin{document}
\symbol{324}
\end{document}

我刚得到一些! Bad character code (324).

答案1

\symbol{324}只能取 8 位范围内的值,并且直接引用底层字体,而不经过 Latex 的编码机制。

任何受支持的符号\usepackage[utf8]{inputenc}都会有一个从 Unicode 编号到基本分布中的 utf8 文件中的 TeX 定义的映射,或者你可以直接编写一些代码。所以 Unicode 324 就是LATIN SMALL LETTER N WITH ACUTE你可以使用的,它对应于基本 latex 分布中\'{n} 的这一行utf8enc.dfu

\DeclareUnicodeCharacter{0144}{\@tabacckludge'n}

十进制 324 等于十六进制 144


如果您不想查找文件中的定义,您可以使用删除 utf8 解码部分的本地定义来加载文件:

\documentclass{article}
\usepackage[latin1]{inputenc}
\def\DeclareUnicodeCharacter#1#2{%
  \expandafter\def\csname ut-#1\endcsname{#2}}
\def\UseUnicodeCharacter#1{\csname ut-#1\endcsname}

\makeatletter\input{utf8enc.dfu}\makeatother
\begin{document}

aaaa\UseUnicodeCharacter{0144}bbb

\end{document}

生产

在此处输入图片描述

答案2

输入相关文件,例如t1enc.dfuT1 编码中可获得的字符。只需为 指定一个合适的定义即可\DeclareUnicodeCharacter

\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\usepackage[latin1]{inputenc}
\newcommand{\loadencoding}[1]{%
  \begingroup
  \def\DeclareUnicodeCharacter##1##2{%
    \expandafter\gdef\csname uni\number"##1\endcsname
      {{\fontencoding{#1}\selectfont##2}}}
  \makeatletter
  \lowercase{\input{#1enc.dfu}}%
  \endgroup}
\newcommand\unisymbol[1]{\csname uni\number#1\endcsname}

\loadencoding{T1}
\loadencoding{T2A}


\begin{document}
\unisymbol{324} \unisymbol{"0144} \unisymbol{"0428}
\end{document}

这将打印

ń ń Ш

相关内容