我想使用 LaTeX 包minted
为我的 c 和 Cuda 代码着色。我需要用捷克语在代码中写注释。我使用inputenc
带有捷克语的包utf-8
,捷克字符(ěščřžýáíé)
在整篇论文中效果很好,但minted
块:
LaTeX 来源:
\begin{minted}{c}
double m[4]; // staticky alokované pole
\end{minted}
输出pdf:
double m[4]; // staticky alokovan\unhbox \voidb@x \bgroup \let \unhbox \voidb@x \
编辑:我试过 XeTeX。minted 可以很好地处理 XeTeX 和捷克字符。但 assymptote 对我来说无法与 XeTeX 配合使用。在 XeTeX 的 .asy 文件上使用 asy 命令占用了我 100% 的 CPU,但在短时间内没有生成任何输出。
编辑:pdflatex 的示例:
\documentclass[a4paper, pt11]{article}
\usepackage[utf8]{inputenc}
\usepackage{fullpage}
\usepackage[english, czech]{babel}
% More symbols
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{graphicx}
\usepackage{asymptote}
\usepackage{minted}
\begin{document}
\begin{figure}[h]
\begin{asy}
import unicode;
size(15cm);
fill((0, 0)--(0.5, 0)--(0.5, 1)--(0, 1)--cycle, red);
fill((0.5, 0)--(6, 0)--(6, 1)--(0.5, 1)--cycle, blue);
fill((6, 0)--(32, 0)--(32, 1)--(6, 1)--cycle, green);
draw((0.25, 1.1)--(0.25, 1.9));
label("znaménko", (0.25,2), N);
label("exponent", (3.25,1), N);
label("mantisa", (18,1), N);
for(int i=0; i < 64; ++i) {
draw((0.5i, 0)--(0.5i + 0.5, 0)--(0.5i + 0.5, 1)--(0.5i, 1)--cycle);
}
label("$63$",(0.25,0),S);
label("$52$",(5.75,0),S);
label("$0$",(31.75,0),S);
\end{asy}
\caption{Uspořádání \emph{double} v paměti}
\label{doublemem}
\end{figure}
\begin{minted}{c}
double m[4]; // staticky alokované pole
m[0] = 1; // přímé nastavení první složky
double *n = (double *) malloc(pocet_cisel * 4 * sizeof (double)); // dynamická alokace
n[4 + 0] = 1; // přímý přístup do první složky druhého čísla
free(n); // vyčištění paměti
\end{minted}
\end{document}
答案1
fancyvrb
这是和的补丁minted
。这应该可以minted
处理 Unicode pdfTeX 可以处理的任何内容。@KonradRudolph 所有这些都归结为确保在将所有内容\detokenize
保存到文件之前对其进行处理。
\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[english, czech]{babel}
\usepackage{fullpage}
\usepackage{minted}
\makeatletter
\newcommand{\minted@write@detok}[1]{%
\immediate\write\FV@OutFile{\detokenize{#1}}}%
\newcommand{\minted@FVB@VerbatimOut}[1]{%
\@bsphack
\begingroup
\FV@UseKeyValues
\FV@DefineWhiteSpace
\def\FV@Space{\space}%
\FV@DefineTabOut
%\def\FV@ProcessLine{\immediate\write\FV@OutFile}% %Old, non-Unicode version
\let\FV@ProcessLine\minted@write@detok %Patch for Unicode
\immediate\openout\FV@OutFile #1\relax
\let\FV@FontScanPrep\relax
%% DG/SR modification begin - May. 18, 1998 (to avoid problems with ligatures)
\let\@noligs\relax
%% DG/SR modification end
\FV@Scan}
\let\FVB@VerbatimOut\minted@FVB@VerbatimOut
\renewcommand\minted@savecode[1]{
\immediate\openout\minted@code\jobname.pyg
\immediate\write\minted@code{\expandafter\detokenize\expandafter{#1}}%
\immediate\closeout\minted@code}
\makeatother
\begin{document}
\begin{minted}{c}
double m[4]; // staticky alokované pole
m[0] = 1; // prímé nastavení první složky
double *n = (double *) malloc(pocet_cisel * 4 * sizeof (double)); // dynamická alokace
n[4 + 0] = 1; // prímý prístup do první složky druhého císla
free(n); // vycištení pameti
\end{minted}
\mint{c}|double m[4]; // staticky alokované pole|
\end{document}
编辑 2013/07/30
等效代码现已纳入minted
开发版本GitHub。
答案2
minted
不完全支持inputenc
;在 LaTeX 中结合 Unicode 使用外部工具几乎是不可能的。
您要么需要使用 XeTeX 或 LuaTeX 而不是纯 LaTeX,要么使用另一个荧光笔包来代替minted
- 但正如您所见,它们在 Unicode 方面也存在一些问题。
我个人建议你使用特克斯。它随每个现代 LaTeX 系统一起提供。您只需使用xelatex
或luatex
命令代替pdflatex
进行排版即可。
答案3
在我的 windows7-64 + Python3 + French + 2013-04-30th 中,这对我有用:
- python 部分:
- 安装 python 3.3 (32 位),以及以下子项目:
. easy_install,(之后需要安装 pygmentize)
. pygmentize, - 为了将 pygmentize 添加到我的路径中,我必须将 pygmentize.exe 和 pygmentize-script.py :
. 从 C:\Python33\Scripts
. 复制到 C:\Python33
- 安装 python 3.3 (32 位),以及以下子项目:
- tex 部分:
- 安装 TexLive 或 Miketex (2.9+),如果没有安装,
- 检查其中是否有 xelatex,以及模块“minted”和“polyglossia”,
- 如果已经是,也许检查一下这些模块版本是否是最新的,
- tex 编辑器参数化(以 texmaker 为例,其他的可能有所不同):
- 使用 texmaker v4.0.1+ (或 >= 3.5.1) (32 位 usb 或完整安装版本),
- 检查其默认文件保存模式是否为“utf-8”,
- 配置 xelatex 编译如下:
xelatex -8bit -shell-escape -synctex=1 -interaction=nonstopmode %.tex
“-8bit” 用来替换每个漂亮空格中的“TAB”字符
“-shell-escape”我不记得了(见其他帖子) - 将默认的“快速编译”设置为 xelatex+pdf:(实际上,xelatex 将编译为 .xvd,并且似乎只有 .pdf 查看器可用)
- 然后使用“quickcompilation”将您的.tex 转换为.pdf。
- 调整您以前的“.tex”文件:
- 从旧的 .tex 中删除 {inputenc} 、 {babel} 引用,
- 添加 {polyglossia},
工作.tex 文件:
%Format: WML-LaTeX2e %This work for Mathematics+French characters+Minted usage %For more complex case \documentclass[10pt,a4paper,notitlepage]{article} \usepackage{amsmath,amssymb} \usepackage[T1]{fontenc} %\usepackage[ansinew]{inputenc} no more %\usepackage[utf8]{inputenc} no more %\usepackage[english, french]{babel} no more %\usepackage{fr} no more \usepackage{a4} % and now with \usepackage{polyglossia} \usepackage{fancyhdr} \usepackage{listings} \usepackage{minted} \topmargin -1.5cm \headheight 0cm \headsep 0.8cm \topskip 0cm \textheight 28cm \footskip 1.5cm \textwidth 18cm \oddsidemargin -1cm \evensidemargin 0cm \begin{document} \centerline{\fbox{\begin{minipage}{10cm}\textbf { \begin{center} Titre accentué \end{center} } \end{minipage}}} \noindent Essai script \begin{minted}[mathescape]{python} # des caractères français for j in range(1,10) : print("c'est la fête !") \end{minted} \end{document}
答案4
值得一提的是,此示例与 ConTeXt MkII(使用 pdftex 引擎)配合使用效果很好。minted
我没有使用软件包,而是使用了vim
ConTeXt 模块,它与 minted 类似,但使用 vim 来突出显示文件。
\enableregime[utf-8]
\usemodule[vim]
\definevimtyping[C]
\starttext
\startC
double m[4]; // staticky alokované pole
\stopC
\stoptext
输出文件写入正确。因此,vim 可以正确突出显示它,并且生成的 pdf 也很好。这表明在 LaTeX 中可以正确处理编码,pdftex
因此在 LaTeX 中也应该可以正确处理编码。