动词出现 UTF-8 错误

动词出现 UTF-8 错误

我正在用 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,就像fancyvrbpythontexfancyvrb开发版本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}

漂亮打印的 Python 代码

相关内容