我在用字符类使用多种语言。我使用 Noto Serif 字体来显示英语。但 ucharclasses 还将 minted 代码更改为 Noto Serif,而后者应该是 Source Code Pro。如何让 ucharclasses 转义 minted?
egreg 评论后更新:
\usepackage{fontspec}
\usepackage{minted}
\usepackage[Latin, Bengali, Devanagari]{ucharclasses}
\newfontfamily\englishfont{Noto Serif}[BoldFont=Noto Serif Bold, ItalicFont=Noto Serif Italic]
\newfontfamily\bengalifont{SolaimanLipi}[BoldFont=SolaimanLipi Bold, Scale=1.2]
\newfontfamily\monof{Source Code Pro}[NFSSFamily=SCP]
\setTransitionsForLatin{\englishfont}{\bengalifont}
\setminted[C++]{fontfamily=SCP, frame=single, fontsize=\footnotesize}
\begin{minted}{C++}
#include<iostream>
\end{minted}
最后的代码块应该使用 Source Code pro 加载。但它正在使用 Noto Serif 加载。
答案1
你可以加
\AtBeginEnvironment{minted}{\disableTransitionRules}
本地禁用转换机制。
或者,如果你不打算使用该formatcom
选项,你可以这样做
\setminted{formatcom=\disableTransitionRules}
完整示例
\documentclass{article}
\usepackage{fontspec}
\usepackage{minted}
\usepackage[Latin, Bengali, Devanagari]{ucharclasses}
\newfontfamily\englishfont{Noto Serif}[BoldFont=Noto Serif Bold, ItalicFont=Noto Serif Italic]
\newfontfamily\bengalifont{fontkalpurush.ttf}
\newfontfamily\monof{Source Code Pro}[NFSSFamily=SCP]
\setTransitionsForLatin{\englishfont}{\bengalifont}
\AtBeginEnvironment{minted}{\disableTransitionRules}
%\setminted{formatcom=\disableTransitionRules}
\setminted[C++]{fontfamily=SCP, frame=single, fontsize=\footnotesize}
\begin{document}
\begin{minted}{C++}
#include<iostream>
\end{minted}
\end{document}
我对方法没有偏好。如果你的 LaTeX 比较旧,该\setminted
方法无需额外软件包即可运行。对于\AtBeginEnvironment
你需要etoolbox
。
答案2
您可以本地禁用 xetex charclass 机制:
\documentclass{article}
\usepackage{fontspec}
\usepackage{minted}
\usepackage[Latin, Bengali, Devanagari]{ucharclasses}
\newfontfamily\englishfont{Noto Serif}[BoldFont=Noto Serif Bold, ItalicFont=Noto Serif Italic]
\newfontfamily\bengalifont{Kalpurush}
\newfontfamily\monof{Source Code Pro}[NFSSFamily=SCP]
\setTransitionsForLatin{\englishfont}{\bengalifont}
\setminted[C++]{fontfamily=SCP, frame=single, fontsize=\footnotesize}
\begin{document}
\showoutput
{\XeTeXinterchartokenstate=0
\begin{minted}{C++}
#include<iostream>
\end{minted}
}
\begin{minted}{C++}
#include<iostream>
\end{minted}
\end{document}
(我更改了字体,因为我没有您使用的所有字体)