如何使 ucharclasses 逃脱 minted?

如何使 ucharclasses 逃脱 minted?

我在用字符类使用多种语言。我使用 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}

(我更改了字体,因为我没有您使用的所有字体)

相关内容