使用 XeLaTeX 中的 minted 源代码文件生成 utf8 数学字符

使用 XeLaTeX 中的 minted 源代码文件生成 utf8 数学字符

我想XeLaTeX/minted显示.java 源文件中的所有数学字符。

更详细地说:我在大学里将编程作业归档为 PDF 文档。我一直在使用 LaTeX 和listings导入源代码。我做了很多数学编程,并在评论中使用了很多数学符号。由于 listings 不支持 utf-8 字符,我慢慢地切换到了minted+ XeLaTeX。我将常见的数学字符保存在计算机上的文本文件中,并在评论时将它们复制到我的 .java 文件中。

让我们考虑以下我用来编译的 .tex 文件$ xelatex -shell-escape minimal

\documentclass[a4paper,oneside]{article}
\usepackage{fontspec}
\usepackage{xunicode}
%\usepackage{unicode-math}

% default, bw, perldoc
\usepackage{minted}
\usemintedstyle{perldoc}

\begin{document}

Document symbols.

≠≤≥×·÷±∓√~≈≅⇔¬∧∨∀∃∅∈∉⊆⊂∪∩∆ℕℤℝℂ∞Σ∑∏∫π

\begin{minted}{java}
// Java code
// ≠≤≥×·÷±∓√~≈≅⇔¬∧∨∀∃∅∈∉⊆⊂∪∩∆ℕℤℝℂ∞Σ∑∏∫π
\end{minted}

\end{document}

它只显示字符×·÷±√~¬∞∑PDF)。为什么会这样?有解决办法吗?

答案1

问题是你使用的字体,即 Latin Modern,没有你想要打印的字形;你在日志文件中发现类似这样的内容

Missing character: There is no ≠ in font [lmmono10-regular]!
Missing character: There is no ≤ in font [lmmono10-regular]!
Missing character: There is no ≥ in font [lmmono10-regular]!
Missing character: There is no ∓ in font [lmmono10-regular]!

解决方案是使用字体这些字形。~在 LaTeX 中具有特殊含义,因此您可以将其输入为\string~(不在minted上下文中)或设置

\AtBeginDocument{\catcode`~=12 }

但这会破坏许多结构,所以我不推荐这样做。

\documentclass[a4paper,oneside]{article}
\usepackage{fontspec}
\setmainfont{FreeSerif}
\setmonofont{FreeMono}

% default, bw, perldoc
\usepackage{minted}
\usemintedstyle{perldoc}

\begin{document}

Document symbols.

≠≤≥×·÷±∓√\string~≈≅⇔¬∧∨∀∃∅∈∉⊆⊂∪∩∆ℕℤℝℂ∞Σ∑∏∫π

\begin{minted}{java}
// Java code
// ≠≤≥×·÷±∓√~≈≅⇔¬∧∨∀∃∅∈∉⊆⊂∪∩∆ℕℤℝℂ∞Σ∑∏∫π
\end{minted}

\end{document}

在此处输入图片描述

相关内容