为什么使用 XeTeX 和 Ubuntu Mono 时会缺少一些 Unicode 字符?

为什么使用 XeTeX 和 Ubuntu Mono 时会缺少一些 Unicode 字符?

我正在尝试使用包含大量非标准 Unicode 字符的 minted 代码列表排版文档。我想使用 Ubuntu Mono 作为等宽字体。以下内容抑制 Unicode 字符:

\documentclass{book}
\usepackage{minted}
\usepackage{fontspec}
\setmonofont{Ubuntu Mono}

\begin{document}

\begin{minted}{java}
Π ⦃a : D₀⦄
\end{minted}

\end{document}

是我做错了什么还是字体没有我想要的那么完整?

答案1

您可以从包含这些字符的字体中取出缺失的字符:

\documentclass{book}

\usepackage{fontspec}
\usepackage{minted}
\usepackage{newunicodechar}

\setmonofont{Ubuntu Mono}
\newfontfamily{\freeserif}{FreeSerif}

\newunicodechar{⦃}{\makebox[.5em]{\freeserif⦃}}
\newunicodechar{⦄}{\makebox[.5em]{\freeserif⦄}}

\begin{document}

\begin{minted}{java}
Π ⦃a : D₀⦄
\end{minted}

\end{document}

在此处输入图片描述

红色框是一个pygmentize问题。

这些角色也采用了 DejaVu Sans 字体;它们的外观如下(还提供了红框的解决方法):

\documentclass{book}

\usepackage{fontspec}
\usepackage{minted}
\usepackage{newunicodechar}

\AtBeginEnvironment{minted}{%
  \let\MINTEDPYGdefault\PYGdefault
  \renewcommand\PYGdefault[2]{%
    \ifstrequal{#1}{err}%
      {\MINTEDPYGdefault{n}{#2}}%
      {\MINTEDPYGdefault{#1}{#2}}%
  }%
}

\setmonofont{Ubuntu Mono}
\newfontfamily{\freeserif}{DejaVu Sans}

\newunicodechar{⦃}{\makebox[.5em]{\freeserif⦃}}
\newunicodechar{⦄}{\makebox[.5em]{\freeserif⦄}}

\begin{document}

\begin{minted}{java}
Π ⦃a : D₀⦄
XXXXXXXXXX
\end{minted}

\end{document}

在此处输入图片描述

答案2

很容易就能看出您的浏览器正在使用什么字体。

如果我在上面的代码中“检查元素”(在 FF/Windows 中查看)它会显示 Segoe UI 符号

所以

\documentclass{book}
\usepackage{minted}
\usepackage{fontspec}
\setmonofont{Segoe UI Symbol}

\begin{document}

\texttt{Π ⦃a : D₀⦄}

\begin{minted}{java}
Π ⦃a : D₀⦄
\end{minted}

\end{document}

生产

在此处输入图片描述

显示字体工作正常,红色框是因为 minted(或者更确切地说 pygmentize)并非不合理地认为语法是 Java 错误,但这是语言设置中的样式选择,而不是排版错误。

相关内容