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