我正在用 Latex 写一本书,我想用 Python 编写代码。我的操作系统是 Linux,我的编辑器是 Kile,它有:
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{verbments}
但我看不到西班牙语的字符
\begin{pyglist}[language = python, encoding = utf8]
print ('Tomorrow is another day')
\end{pyglist}
我使用命令执行编译
pdflatex -shell-escape -interaction = nonstopmode
但我收到以下错误。
*** Error while highlighting:
UnicodeDecodeError: 'utf-8' codec can not decode byte 0xf1 in position 9: invalid continuation byte
(file "/usr/lib/python3.3/site-packages/pygments/lexer.py", line 164, in get_tokens)
我还发现,verbments 生成了一个名为 name.pyg.sty 的文件,奇怪的是,该文件采用 ISO-8859-15 编码,而不是像我的所有其他文件一样采用 UTF-8 编码。
答案1
verbments
,如minted
和,在幕后 pythontex
使用。补丁来支持Unicode,就像fancyvrb
pythontex
fancyvrb
开发版本的minted
版本(但不是 CTAN 上的版本)。您可以使用pythontex
或 的开发版本minted
。或者您可以直接复制补丁fancyvrb
。基本上,当fancyvrb
将代码写入临时文件时,它需要\detokenize
一切以使 Unicode 正常工作。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{verbments}
\makeatletter
\newcommand{\verbments@write@detok}[1]{%
\immediate\write\FV@OutFile{\detokenize{#1}}}
\newcommand{\verbments@FVB@VerbatimOut}[1]{%
\@bsphack
\begingroup
\FV@UseKeyValues
\FV@DefineWhiteSpace
\def\FV@Space{\space}%
\FV@DefineTabOut
\let\FV@ProcessLine\verbments@write@detok
\immediate\openout\FV@OutFile #1\relax
\let\FV@FontScanPrep\relax
\let\@noligs\relax
\FV@Scan}
\let\FVB@VerbatimOut\verbments@FVB@VerbatimOut
\makeatother
\begin{document}
\begin{pyglist}[language = python]
print('Tomorrow is another day é ñ')
\end{pyglist}
\end{document}
答案2
我无法使用verbments
或成功编译minted
。但是,如果你有一个相当新的 TeX 发行版,pythontex
则可以:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pythontex}
\begin{document}
\begin{pygments}{python}
print ('Tomorrow is another day é ñ')
\end{pygments}
\end{document}
您必须运行pdflatex
,然后pythontex
覆盖主文件。再运行一次pdflatex
将包含格式化的列表。
答案3
verbments
我在上运气不佳pdflatex
。错误消息与原始发帖者看到的非常接近。还<name>.pyg.lst
生成了一个 ISO 8859-1(5) 编码文件。
将编译器更改为可以lualatex --shell-escape
很好地处理以下文档:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{luainputenc}
\usepackage{verbments}
\begin{document}
\begin{pyglist}[language = python, encoding = utf8]
print ('Tomorrow is another day é ñ')
\end{pyglist}
\end{document}