我正在尝试使用 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。谢谢您的帮助。