提问于:
浏览数:
2828
# 简介
我们知道LaTeX 编译时,在导言区要加载很多配置文件,零碎的文件读取比较慢(Windows 下 IO 瓶颈尤其明显)影响编译效率。
从这一点考虑:我们可以对导言区预编译出【内存运行状态转储】文件 .fmt 进行提速
# 预编译(生成 cfg.fmt 文件):
编译要求:开启初始化选项 -initialize 或 -ini
用 -jobname 指定目标文件名
#### 方法 1
① 准备原文件(只留导言区,正文清除正文区):
② pdflatex -ini -jobname="cfg" "&pdflatex" "cfg.tex\dump"
#### 方法 2
配合 mylatexformat 宏包直接对一般文件编译:
pdftex -ini -jobname="cfg" "&pdflatex" "mylatexformat.ltx" "doc.tex"
##### 说明:
- &pdflatex 是预加载格式
- \dump 执行转储
- 提前加载了 mylatexformat.ltx 宏包,改变编译过程,在 \begin{document} 前转储内存状态。其实就相当于帮用户剥离正文区数据,转储导言区内存状态
- 需要记录时间可以用编译选项: -time-statistics
# 使用 cfg.fmt 格式:
编译要求:开启选项 -shell-escape
- ① 编译命令行中加载 fmt 文件: pdflatex -shell-escape "&cfg" doc.tex
- ② 在文件开头中调用,方法是,在首行加 %&cfg
说明:
编译选项: -parse-first-line ,解析首行(%&cfg)
编译选项: -dont-parse-first-line ,不解析首行
# 问题
- ① 为何引擎载入标准的 pdflatex.fmt 不用开启 -shell-escape,而用户自己搞的 .fmt 就要 ?
- ② MikTeX 有一个格式管理器,但是 Build 失败,Why? How ?
![MikTeX有一个fmt格式管理器,但是Build失败,Why? How?](https://pics.latexstudio.net/data/images/202004/b2b7bee8cc12e0b.png "MikTeX有一个fmt格式管理器,但是Build失败,Why? How?")
- ③ 不支持中文文件名,咋整?【痛点】
编译环境 : proTeXt 2017、2019 、2020 (Mik)
## MWE 测试文件
原稿: 中文文件名编译无压力.tex
```tex
\documentclass[UTF8]{ctexbook}
\usepackage{tikz,lipsum}
\begin{document}
正文可用汉字,无 BUG
\lipsum
\end{document}
```
预编译文件(导言区): cfg.tex
```tex
\documentclass[UTF8]{ctexbook}
\usepackage{tikz,lipsum}
```
编译正常的正文文件(英文文件名): doc.tex
```tex
%&cfg
\begin{document}
正文可用汉字
\lipsum
\end{document}
```
### 【痛点】那么问题来了,如果将以上 "doc.tex" 改为中文文件名(如 "汉字.tex")就编译报错!?
报错信息如下:
```
$ pdflatex -time-statistics -shell-escape "&cfg" 汉字.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (MiKTeX 2.9.6500 64-bit)
entering extended mode
! I can't find file `./'.
\protect
<*> &cfg ./汉字
.tex
Please type another input file name:
```
Why?怎么解决?
猜想,Windows 内核采用 GBK ,可能是引擎在这种编译模式下,文件名读取出是什么问题?
是不是编译时还要带什么参数?