verbments 列表中的 T2A 字体形状

verbments 列表中的 T2A 字体形状

我想在 verbments 列表中使用 T2A 字体形状(用于源代码中的注释),但没有成功。对于代码

\begin{pyglist}[language=haskell]
fact n = foldl 1 (*) [1..n] -- так определяет !n профессор информатики
\end{pyglist}

pdflatex 的结果是

在此处输入图片描述

使用 xelatex 的结果是

在此处输入图片描述

关于如何在评论中获取纯 T2A 文本有什么建议吗?

答案1

如果pdflatex使用,则需要用高位设置来中和字符的活动 catcode:

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{verbments}
\usepackage{etoolbox}

\makeatletter
\newcommand{\xpyg@neutralize}{% make characters in the range 128-255 printable
  \@tempcnta=128
  \loop
    \catcode\@tempcnta=12
    \ifnum\@tempcnta<255
    \advance\@tempcnta\@ne
  \repeat
}

\patchcmd{\pyglist@}
  {\VerbatimEnvironment}
  {\VerbatimEnvironment\begingroup\xpyg@neutralize}
  {}{}
\patchcmd{\endpyglist}
  {\input}
  {\endgroup\input}
  {}{}
\makeatother

\begin{document}
\begin{pyglist}[language=haskell]
fact n = foldl 1 (*) [1..n] -- так определяет !n профессор информатики
\end{pyglist}
\end{document}

当使用 XeLaTeX 或 LuaLaTeX 时,相同的补丁是无害的,但对于这些,您需要支持西里尔字母的等宽字体,例如 CM Unicode。

这是可与所有三个引擎一起运行的版本。

\documentclass{article}
\usepackage{ifxetex,ifluatex}
\newif\ifunicodeengine
\ifxetex\unicodeenginetrue\else\ifluatex\unicodeenginetrue\fi\fi

\ifunicodeengine
  \usepackage{fontspec}
  \setmainfont[Ligatures=TeX]{CMU Serif}
  \setsansfont[Ligatures=TeX]{CMU Sans Serif}
  \setmonofont{CMU Typewriter Text}
\else
  \usepackage[T2A]{fontenc}
  \usepackage[utf8]{inputenc}
\fi

\usepackage{verbments}
\usepackage{etoolbox}

\makeatletter
\newcommand{\xpyg@neutralize}{%
  \@tempcnta=128
  \loop
    \catcode\@tempcnta=12
    \ifnum\@tempcnta<255
    \advance\@tempcnta\@ne
  \repeat
}

\patchcmd{\pyglist@}
  {\VerbatimEnvironment}
  {\VerbatimEnvironment\begingroup\xpyg@neutralize}
  {}{}
\patchcmd{\endpyglist}
  {\input}
  {\endgroup\input}
  {}{}
\makeatother

\begin{document}
\begin{pyglist}[language=haskell]
fact n = foldl 1 (*) [1..n] -- так определяет !n профессор информатики
\end{pyglist}
\end{document}

在此处输入图片描述

答案2

xelatex使用或运行文档lualatex

\documentclass{report}
\usepackage{fontspec}
\setmainfont{DejaVu Sans}
\setmonofont[Scale=0.85]{DejaVu Sans Mono}
\usepackage{verbments}
\begin{document}

\begin{pyglist}[language=haskell]
fact n = foldl 1 (*) [1..n] -- так определяет !n профессор информатики
\end{pyglist}

\end{document}

在此处输入图片描述

相关内容