使用 FiraMono 字体(dvips -> ps2pdf)无法正确显示字符

使用 FiraMono 字体(dvips -> ps2pdf)无法正确显示字符

我的标签如下:

\documentclass{book}
\usepackage{minted}
\usemintedstyle{default}
\usepackage[T1]{fontenc}
\usepackage{FiraMono}
\begin{document}

\begin{minted}[]{python}
with open('data/anna-karenina.txt', encoding='koi8-r') as stream:
    # Use stream.readline() to retrieve the next line from a file,
    # in this case the 1st one:
    line = stream.readline()

print(line)
\end{minted}

\begin{minted}[]{text}
Все счастливые семьи похожи друг на друга, каждая несчастливая семья
несчастлива по-своему.
\end{minted}

\end{document}

输出

在此处输入图片描述

但输出应该是

在此处输入图片描述

请注意,我正在使用Windows, MikTeX 2.9LaTeX -> dvips -> ps2pdf 请指出我的标签中出了什么问题......

答案1

作为Ulrike Fischer 指出,Fira Mono 不支持 T2A 编码。

您可以使用支持西里尔文的 DejaVu Sans Mono。无论如何,pdflatex如果默认编码是 T1,您就无法(轻易地)混合西里尔文和拉丁文。因此我t2a为此提供了一个环境。混合如果当前编码是 T2A,那么这是可能的。

\documentclass{book}
\usepackage[T2A,T1]{fontenc}
\usepackage{minted}
\usemintedstyle{default}
\usepackage{DejaVuSansMono}

\newenvironment{t2a}
  {\fontencoding{T2A}\selectfont\ignorespaces}
  {\ignorespacesafterend}

\begin{document}

\begin{minted}[]{python}
with open('data/anna-karenina.txt', encoding='koi8-r') as stream:
    # Use stream.readline() to retrieve the next line from a file,
    # in this case the 1st one:
    line = stream.readline()

print(line)
\end{minted}

\begin{t2a}
\begin{minted}[]{text}
Все счастливые семьи похожи друг на друга, каждая несчастливая семья
несчастлива по-своему.
\end{minted}
\end{t2a}

\end{document}

在此处输入图片描述

如果您想坚持使用 Fira Mono 学习拉丁语,您仍然可以这样做。

\documentclass{book}
\usepackage[T2A,T1]{fontenc}
\usepackage{minted}
\usemintedstyle{default}
\usepackage{FiraMono}

\DeclareFontFamilySubstitution{T2A}{\ttdefault}{DejaVuSansMono-TLF}

\newenvironment{t2a}
  {\fontencoding{T2A}\selectfont\ignorespaces}
  {\ignorespacesafterend}

\begin{document}

\begin{t2a}
\begin{minted}[]{python}
with open('data/anna-karenina.txt', encoding='koi8-r') as stream:
    # Use stream.readline() to retrieve the next line from a file,
    # in this case the 1st one:
    line = stream.readline()

print(line)
\end{minted}

\begin{minted}[]{text}
Все счастливые семьи похожи друг на друга, каждая несчастливая семья
несчастлива по-своему.
\end{minted}
\end{t2a}

\end{document}

但是,在这种情况下,您不应在同一minted环境中混合使用拉丁语和西里尔语。

在此处输入图片描述

答案2

您需要加载 T2A 编码,并让西里尔文命令切换到该编码。但 Fira 的 type1 版本不支持 T2A,因此它会退回到 cmr:

LaTeX Font Warning: Font shape `T2A/FiraMono-TOsF/m/n' undefined
(Font)              using `T2A/cmr/m/n' instead
\documentclass{book}
\usepackage{minted}
\usemintedstyle{default}
\usepackage[T2A,T1]{fontenc}
\usepackage{FiraMono}
\DeclareTextSymbolDefault{\CYRV}{T2A}
\DeclareTextSymbolDefault{\cyrs}{T2A}
\DeclareTextSymbolDefault{\cyre}{T2A}
\DeclareTextSymbolDefault{\cyrch}{T2A}
\DeclareTextSymbolDefault{\cyra}{T2A}
% and so on...
\begin{document}

\begin{minted}[]{text}
Все сча
\end{minted}

\end{document}

在此处输入图片描述

相关内容