Minted 和 UTF-8 的难题

Minted 和 UTF-8 的难题

我正在尝试使用 LaTeX 和 Minted 包排版 Python 程序。我在 Ubuntu 15.10 下,从 Ubuntu 标准存储库安装了 TeXlive。python-pygment 包的版本为 2.0.1+dfsg-1。编译以下代码:

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{minted}
% \setminted{encoding=utf-8}

\begin{document}
On importe toute la librairie Tkinter (attention, cette écriture ne fonctionne qu'en Python 3)
\begin{minted}{python}
from tkinter import *

# Creation de la fenetre de base de l'application
f=Tk()
# On lui donne un nom
f.title("Découverte de Tkinter")
\end{minted}

\end{document}

最终出现以下错误:

! Package inputenc Error: Unicode char \u8:�co not set up for use with LaTeX. 
See the inputenc package documentation for explanation.
Type  H <return>  for immediate help.
...                                              
l.7 ...dq{}D�couverte de Tkinter\PYZdq{}}\PY{p}{)}

如果我将字符串中的“é”改为简单的“e”,它会默默地编译。我读到过一些文章说设置编码或 outencoding 参数可能会很有用,但我得到了另一个错误:

(./Python-Tkinter.w18)))/usr/bin/pygmentize
! Undefined control sequence.
<recently read> \setminted 
l.7 \setminted
              {encoding=utf-8}
?

我检查了 /usr/share/texlive/texmf-dist/tex/latex/minted/minted.sty 文件(版本为 2015/01/31 v2.0):

user@machine:/usr/share/texlive/texmf-dist/tex/latex/minted# cat minted.sty | grep -E 'encoding|setminted'
    \ifx\encodingdefault\upquote@OTone
\minted@def@optcl{encoding}{-P encoding}{#1}
\minted@def@optcl{outencoding}{-P outencoding}{#1}
\newcommand{\minted@encoding}{\minted@get@opt{encoding}{UTF8}}
          %Need a version of open() that supports encoding under Python 2
            f = open(\"}#1\detokenize{\", \"r\", encoding=\"}\minted@encoding\detokenize{\");
            f = open(\"}\minted@outputdir\jobname.pyg\detokenize{\", \"w\", encoding=\"}\minted@encoding\detokenize{\");
        %Need a version of open() that supports encoding under Python 2
          f = open(\"}#1\detokenize{\", \"r\", encoding=\"}\minted@encoding\detokenize{\");
          f = open(\"}\minted@outputdir\jobname.pyg\detokenize{\", \"w\", encoding=\"}\minted@encoding\detokenize{\");
\newcommand{\setminted}[2][]{%
\newcommand{\setmintedinline}[2][]{%
\setmintedinline[php]{startinline=true}
\newcommand{\usemintedstyle}[2][]{\setminted[#1]{style=#2}}
    \setminted{style=default}%

根据建议,以下是使用 \listfiles 命令进行命令行编译的输出:

 *File List*
 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size11.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
inputenc.sty    2015/03/17 v1.2c Input encoding file
    utf8.def    2014/09/29 v1.1m UTF-8 support for inputenc
   t1enc.dfu    2014/09/29 v1.1m UTF-8 support for inputenc
  ot1enc.dfu    2014/09/29 v1.1m UTF-8 support for inputenc
  omsenc.dfu    2014/09/29 v1.1m UTF-8 support for inputenc
 fontenc.sty
   t1enc.def    2005/09/27 v1.99g Standard LaTeX file
   babel.sty    2014/09/25 3.9l The Babel package
 frenchb.ldf    2015/06/26 v3.1g French support from the babel system
scalefnt.sty    
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
  minted.sty    2011/09/17 v1.7 Yet another Pygments shim for LaTeX
fancyvrb.sty    2008/02/07
  xcolor.sty    2007/01/21 v2.11 LaTeX color extensions (UK)
   color.cfg    2007/01/18 v1.5 color configuration of teTeX/TeXLive
  pdftex.def    2011/05/27 v0.06d Graphics/color for pdfTeX
infwarerr.sty    2010/04/08 v1.3 Providing info/warning/error messages (HO)
 ltxcmds.sty    2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
   float.sty    2001/11/08 v1.3d Float enhancements (AL)
  ifthen.sty    2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
    calc.sty    2014/10/28 v4.3 Infix arithmetic (KKT,FJ)
ifplatform.sty    2010/10/22 v0.4 Testing for the operating system
pdftexcmds.sty    2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO)
ifluatex.sty    2010/03/01 v1.3 Provides the ifluatex switch (HO)
   ifpdf.sty    2011/01/30 v2.3 Provides the ifpdf switch (HO)
catchfile.sty    2011/03/01 v1.6 Catch the contents of a file (HO)
etexcmds.sty    2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
testMinted.w18
supp-pdf.mkii
testMinted.pyg
testMinted.out.pyg
  t1cmtt.fd    2014/09/29 v2.5h Standard LaTeX font definitions
 ***********

一切似乎都还好。我被困住了。如果有人能给我点建议就太好了。谢谢。

答案1

我能够通过使用路拉泰克斯-命令而不是pdflatex用于编译。LuaLatex 支持 Unicode,因此您(仅)需要注意 TeX 文件中的两件事:

  • 注释掉导入/配置的行输入-包裹:

    %\RequirePackage[utf8]{inputenc}
    
  • 重建整个文档/项目(例如在 TexStudio 中有两个按钮:“重建并查看“ 和 ”编译“。例如,仅仅编译不会创建新的目录,因此路拉泰克斯将使用旧的*.toc-file - 并且可能会在那里遇到编码错误。)

答案2

我终于成功编译了我的文档(代码中包含 UTF-8 字符)。我不得不删除 Ubuntu 标准存储库中提供的 TeXlive,然后安装 TeXlive 2015。这在我的其中一台运行 Ubuntu 15.10 的计算机上有效。

但我的另一台运行 Ubuntu 14.04 的电脑上的问题仍然没有解决。这里的 python-pygments 包是 1.6 版本,我认为问题就在这里(我之前将 TeXlive 2015(而不是来自 repos 的 TeXlive)更新到了最新状态)。

我还尝试使用从 Ubuntu 15.10(v.2.0.1)反向移植的包来更新 python-pygments 包,但是这会破坏一些东西(例如:pygmentize 不再起作用)。

如果有人对此有想法...提前致谢。


更新:根据我的问题倒数第二条评论,我将尝试使用 LuaTeX。谢谢您的帮助。

相关内容