我想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}