在 Sublime Text 3 下使用 LaTeX 代码高亮包 minted 及遇到的问题与解决 @ Wings            分类 技术
发布于 星期四, 十二月 3 日, 2020 年
更新于 星期二, 七月 20 日, 2021 年

搞了一个下午啊!

minted简介

官网

专门用来代码高亮的, 比listing包好

前置准备

minted 依赖于 Python 和一个 Python 的库 pygments. 所以首先确保安装了 Python 和 pygments.

Sublime Text 3 中编译$\LaTeX$, 需要安装包 LaTeXTools, 详见这里

食用方式

开袋即食

以c++代码块为例

首先引用包

\usepackage{minted}

在需要写代码的地方使用minted环境

\begin{minted}{c++}
#include <iostream>
using namespace std;
int main() {
	cout << "Hello Minted!" << endl;
	return 0;
}
\end{minted}

还用行间代码以及代码文件引用的方式, 暂时用不到, 没查

蘸点酱料

官方文档

我常用的有如下选项:

  • linenos=true 显示行号
  • mathescape 在注释中可以使用$\LaTeX$数学(即$$)
  • breaklines 自动换行
  • bgcolor=<colorstring> 背景颜色, 默认白
  • tabsize=4 tab宽度
  • texcl, texcomments 注视中使用$\LaTeX$ (文档说c/c++用这个会出事)

问题

-shell-escape

当我满怀期待地编译运行时, 报错啦!

Package minted Error: You must invoke LaTeX with the -shell-escape flag.

原因

minted包需要使用$\LaTeX$以外的排版格式, 即 pygments. 所以需要在编译的时候加上一句 -shell-escape

解决方法 #1

在需要编译的 .tex 头上写 % !TEX options=--shell-escape, 如下:

% !TEX options=--shell-escape
\documentclass{ctexart}
\usepackage{minted}
\begin{document}
\begin{minted}{c++}
#include <iostream>
using namespace std;
int main() {
	cout << "Hello Minted!" << endl;
	return 0;
}
\end{minted}
\end{document}

然后保证编译的时候使用的是 $\LaTeX$ Tools 的 traditionalbasic 编译选项.

解决方法 #2

打开 $\LaTeX$ Tools 的设置, 找到 build-setting, 加入 "options": "--shell-escape"options=["--shell-escape"]如下:

	"builder_settings" : {

		// General settings:
		// See README or third-party documentation

		"options": ["--shell-escape"],

		// (built-ins): true shows the log of each command in the output panel
		"display_log" : false,

		// Platform-specific settings:
		"osx" : {
			// See README or third-party documentation
		},

		"windows" : {
			// See README or third-party documentation
		},

		"linux" : {
			// See README or third-party documentation
		}

或者在指定系统里加入.

这里的 options 就是可以手写的编译命令, 后面跟的是一个字符串或者字符串列表(如果有多个选项的话就要用列表).

pygmentize

当我再一次满怀期待地编译运行时, 又报错啦!

Package minted Error: You must have ‘pygmentize’ installed to use this package.

原因

$\LaTeX$ Tools 没有找到 pygmentize.exe

解决方法

先确保成功安装 pygmentize, 命令行输入 pygmentize -h查看是否安装成功.

$\LaTeX$ Tools 太笨啦, 环境变量里的东西他不会找, 我们需要手动给他指定.

打开 $\LaTeX$ Tools 的设置, 找到 windows (对于的操作系统), 在 texpath 中添加 pygmentize 所在目录( python 安装目录下的 Scripts), 如下:

	"windows": {
		// Path used when invoking tex & friends; "" is fine for MiKTeX
		// For TeXlive 2011 (or other years) use
		// "texpath" : "C:\\texlive\\2011\\bin\\win32;$PATH",
		"texpath" : "D:\\Program\\MiKTeX\\miktex\\bin\\x64;C:\\Users\\Wings\\AppData\\Local\\Programs\\Python\\Python38\\Scripts",
		// TeX distro: "miktex" or "texlive"
		"distro" : "miktex",
		// Command to invoke Sumatra. If blank, "SumatraPDF.exe" is used (it has to be on your PATH)
		"sumatra": "C:\\Users\\Wings\\AppData\\Local\\SumatraPDF\\SumatraPDF.exe",
		// Command to invoke Sublime Text. Used if the keep_focus toggle is true.
		// If blank, "subl.exe" or "sublime_text.exe" will be used.
		"sublime_executable": "",
		// how long (in seconds) to wait after the jump_to_pdf command completes
		// before switching focus back to Sublime Text. This may need to be
		// adjusted depending on your machine and configuration.
		"keep_focus_delay": 0.5
	  },

上网搜的时候查到说还可以直接把 pygmentize 复制到 tex 所在目录下. 这个方法太暴力了, 没试.

编译出现 Missing $ inserted 类似报错

使用minted包的时候, 有时候会出现奇奇怪怪的报错, 尤其是当我写C和Java程序设计报告的时候, 老出问题. 奇怪的是之前写板子的时候没有任何问题.

报错如下:

D:\Program\MiKTeX\tex\generic\ctex\zhmap\ctex-zhmap-windows.tex:2: Missing $ inserted. [%% This is file `ctex-zhmap-windows.tex']
D:\Program\MiKTeX\tex\generic\ctex\zhmap\ctex-zhmap-windows.tex:28: You can't use `macro parameter character #' in math mode. [  \catcode 35=6  % #]
D:\Program\MiKTeX\tex\generic\ctex\zhmap\ctex-zhmap-windows.tex:39: You can't use `macro parameter character #' in math mode. [  \x  35  6 % #]
D:\Program\MiKTeX\tex\generic\ctex\zhmap\ctex-zhmap-windows.tex:134: Undefined control sequence. [\ctex@zhmap@endinput]
D:\大学\java\第三次上机\report\_minted-report\762EB8EB8C4215A2FCC1A78E3499E2873876A35572848E573867E828E5D5C492.pygtex:5: Missing $ inserted. [\end{Verbatim}]

原因

由于 pygmentize 对代码进行了各种转义, 在 pdfLatex 编译下, 会出现奇奇怪怪的问题, 这是一个 pygmentize 的 bug (issue里开发者说的).

解决方法

换用 xelatex 编译就好了

字体的话默认也有粗体, 但是效果不是很明显, 不过黑白高亮还是看得出来的

留下昵称和邮箱, 可在第一时间获悉回复通知哦~

2021 FLAG

  • 找个妹子
  • 进计科
  • XCPC拿块金牌
  • 补全算法知识, 整全板子
  • 学会Web开发相关知识
  • 在服务器上搭建电子书库
  • 写个游戏并上线
  • 能弹一首曲子
  • 写首完整的曲子
  • 练习悠悠球
  • 三阶速拧20s

个人简介

我叫 Wings, 来自江西上饶, 目前人在西安, 是西电的一名学生.

常以 WingsWingsZengWingsWings的ID在各大小网站上游走, 一般来说, Wings不是我 😔, WingsZeng 一定是我 😊.

热爱算法, 喜欢钻研各种计算机技术.

业余爱好广泛, 只要不是文化课基本上都感兴趣😏.

开发/项目经历

  1. Android游戏 小墨滴的复仇 (弃坑)
  2. Android游戏 Circle Run (弃坑)
  3. Windows游戏 Snague (可能弃坑了吧)
  4. Python后端 Fathy' (可能弃坑了吧)

to be continued

教育经历

时间 学历 学校
2008-2014 小学 上饶市第十二小学
2014-2017 初中 上饶市第四中学
2017-2020 高中 上饶市第一中学
2020-2024 本科 西安电子科技大学
to be continued

比赛/竞赛经历

太久远太小的记不到了…

  1. 2017 国学竞赛初赛江西 没有分数或排名 二乙
  2. 2018 NOIP提高 258 省二
  3. 2019 CSP-S江西专场 145 省二
  4. 2019 数学竞赛初赛 70 没排名 (复赛打铁qaq)
  5. 2020 Gitee|Python贪吃蛇魔改大赛 可能是第四? 二等奖
  6. 2020 西电ACM训练基地熊猫杯 第四 银牌
  7. 2020 西安三校微软学生俱乐部Hackathon 和二等奖最后一名差0.5分 三等奖
  8. 2020 西电星火杯 三等奖
  9. 2020 西电ACM新生赛 第九 金牌
  10. 2020 ICPC 亚洲区域赛 济南站 132名 铜牌
  11. 2020-2021 第二届全国大学生算法设计与编程挑战赛(冬季赛) 924名 铜牌 (别骂了别骂了)
  12. 2020 ICPC 亚洲区域赛 昆明站 打星
  13. 2020 ICPC Asia-East Continent Final 签完到溜 打铁
  14. 西电"智能星"第一届自动驾驶小车比赛 第五 优胜奖|极速奖 本来可以冠军的别骂了别骂了

to be continued

爱好

技术

  • 算法
  • 独立游戏开发

游戏

  • Minecraft
  • Black Survival
  • I Wanna
  • Celeste
  • Life is Strange
  • Need for speed

运动

  • 篮球
  • 桌球
  • 乒乓球
  • 羽毛球
  • 慢跑

音乐

  • 吉他
  • 词曲
  • 流行

玩具

  • 魔方
    • 三阶速拧
    • 三阶盲拧
    • 高阶
  • yoyo球

追星

  • VAE
  • Benedict Cumberbatch