arxiv_latex_cleaner
这个工具可以让你轻松清理论文的LaTeX代码以便提交到arXiv。从包含所有代码的文件夹,如/path/to/latex/
,它会创建一个新的文件夹/path/to/latex_arXiv/
,该文件夹已准备好压缩并上传到arXiv。
调用示例:
arxiv_latex_cleaner /path/to/latex --resize_images --im_size 500 --images_allowlist='{"images/im.png":2000}'
或者简单地使用配置文件
arxiv_latex_cleaner /path/to/latex --config cleaner_config.yaml
安装:
pip install arxiv-latex-cleaner
:exclamation: arxiv_latex_cleaner 仅兼容 Python >=3.9 :exclamation: |
---|
如果使用MacOS,你可以通过Homebrew安装:
brew install arxiv_latex_cleaner
或者,你可以下载源代码:
git clone https://github.com/google-research/arxiv-latex-cleaner
cd arxiv-latex-cleaner/
python -m arxiv_latex_cleaner --help
并直接从源代码安装为命令行程序:
python setup.py install
主要特性:
注重隐私
- 移除所有辅助文件(
.aux
、.log
、.out
等)。 - 移除代码中的所有注释(是的,这些在arXiv上是可见的,你不会想要它们被看到)。这也包括
\begin{comment}\end{comment}
、\iffalse\fi
和\if0\fi
环境。 - 可选择移除用
commands_to_delete
输入的用户自定义命令(比如你在最后重定义为空字符串的\todo{}
)。 - 可选择通过
cleaner_config.yaml
文件定义自定义正则表达式替换规则。
注重大小
arXiv提交有50MB的限制,为了使其符合要求:
- 移除所有未使用的
.tex
文件(那些不在根目录且不被任何其他.tex
文件包含的文件)。 - 移除所有占用空间但未使用的图片(那些实际上没有被任何使用的
.tex
文件包含的图片)。 - 可选择将所有图片调整为
im_size
像素,以减小提交的大小。你可以使用images_allowlist
将某些图片列入白名单以跳过全局大小设置。 - 可选择使用ghostscript压缩
.pdf
文件(仅限Linux和Mac)。你可以使用images_allowlist
将某些PDF列入白名单以跳过全局大小设置。
TikZ图片源代码隐藏
为防止上传tikzpicture源代码或原始模拟数据,此功能:
- 将tikzpicture环境
\begin{tikzpicture} ... \end{tikzpicture}
替换为相应的\includegraphics{EXTERNAL_TIKZ_FOLDER/picture_name.pdf}
。 - 需要在
EXTERNAL_TIKZ_FOLDER
文件夹中有外部编译的TikZ图片.pdf
文件。有关TikZ图片外部化,请参见PGF/TikZ手册的第52节(外部化库)。 - 仅替换前面有
\tikzsetnextfilename{picture_name}
命令的环境(如\tikzsetnextfilename{picture_name}\begin{tikzpicture} ... \end{tikzpicture}
),其中外部化的picture_name.pdf
文件名与picture_name
匹配。
基于正则表达式组捕获的更复杂模式替换
在撰写论文时使用一组自定义LaTeX命令有时很有用。为了在提交arXiv时去除它们,可以简单地使用正则表达式插入将它们恢复为普通LaTeX。
{
"pattern" : '(?:\\figcomp{\s*)(?P<first>.*?)\s*}\s*{\s*(?P<second>.*?)\s*}\s*{\s*(?P<third>.*?)\s*}',
"insertion" : '\parbox[c]{{ {second} \linewidth}} {{ \includegraphics[width= {third} \linewidth]{{figures/{first} }} }}',
"description" : "Replace figcomp"
}
上面的模式将查找所有\figcomp{path}{w1}{w2}
命令并将其替换为\parbox[c]{w1\linewidth}{\includegraphics[width=w2\linewidth]{figures/path}}
。注意,插入模板使用模式中的命名组捕获填充。请注意,替换在处理所有\includegraphics
命令和复制相应文件路径之前进行,确保所有图片文件都被复制到清理后的版本中。有关如何指定模式的详细信息,另请参见cleaner_config.yaml。
使用方法:
用法: arxiv_latex_cleaner@v1.0.8 [-h] [--resize_images] [--im_size IM_SIZE]
[--compress_pdf]
[--pdf_im_resolution PDF_IM_RESOLUTION]
[--images_allowlist IMAGES_ALLOWLIST]
[--keep_bib]
[--commands_to_delete COMMANDS_TO_DELETE [COMMANDS_TO_DELETE ...]]
[--commands_only_to_delete COMMANDS_ONLY_TO_DELETE [COMMANDS_ONLY_TO_DELETE ...]]
[--environments_to_delete ENVIRONMENTS_TO_DELETE [ENVIRONMENTS_TO_DELETE ...]]
[--if_exceptions IF_EXCEPTIONS [IF_EXCEPTIONS ...]]
[--use_external_tikz USE_EXTERNAL_TIKZ]
[--svg_inkscape [SVG_INKSCAPE]]
[--config CONFIG] [--verbose]
input_folder
清理论文的LaTeX代码以提交到arXiv。查看README以获取更多使用信息。
位置参数:
input_folder 包含LaTeX代码的输入文件夹。
可选参数:
-h, --help 显示此帮助信息并退出
--resize_images 调整图像大小。
--im_size IM_SIZE 输出图像的大小(以像素为单位,最长边)。
微调此项以尽可能接近10MB。
--compress_pdf 使用ghostscript压缩PDF图像(仅限Linux和Mac)。
--pdf_im_resolution PDF_IM_RESOLUTION
工具重新采样PDF图像的分辨率(以dpi为单位)。
--images_allowlist IMAGES_ALLOWLIST
不会被调整为默认分辨率的图像(和PDF),而是使用这里提供的分辨率。
图像的值为像素,PDF的值为dpi,分别对应--im_size和
--pdf_im_resolution。格式为字典,如:'{"path/to/im.jpg": 1000}'
--keep_bib 避免删除*.bib文件。
--commands_to_delete COMMANDS_TO_DELETE [COMMANDS_TO_DELETE ...]
将被删除的LaTeX命令。对用户定义的\todo命令等很有用。
例如,要删除所有\todo1{}和\todo2{}的出现,请使用
`--commands_to_delete todo1 todo2`运行工具。请注意,
位置参数`input_folder`不能紧跟在`commands_to_delete`之后,
因为解析器无法知道它是否是另一个要删除的命令。
--commands_only_to_delete COMMANDS_ONLY_TO_DELETE [COMMANDS_ONLY_TO_DELETE ...]
将被删除但命令中包裹的文本将被保留的LaTeX命令。
对于改变文本格式和颜色的命令很有用,你可能想删除这些命令
但保留其中的文本。用法与commands_to_delete完全相同。
注意,如果这里列出的命令与commands_to_delete后的命令重复,
默认操作将是保留包裹的文本。
--environments_to_delete ENVIRONMENTS_TO_DELETE [ENVIRONMENTS_TO_DELETE ...]
将被删除的LaTeX环境。对用户定义的注释环境等很有用。
例如,要删除所有\begin{note} ... \end{note}的出现,
请使用`--environments_to_delete note`运行工具。
请注意,位置参数`input_folder`不能紧跟在
`environments_to_delete`之后,因为解析器无法知道
它是否是另一个要删除的环境。
--if_exceptions IF_EXCEPTIONS [IF_EXCEPTIONS ...]
常量TeX原始条件(\iffalse, \iftrue等)被简化,
即保留true分支,删除false分支。为正确解析条件结构,
所有以`\if`开头的命令都被假定为TeX原始条件
(例如,由\newif\ifvar声明)。一些已知的例外
(如\iff, \ifthenelse等)已包含在内,但你可以
使用`--if_exceptions iffalt`添加自定义例外。
--use_external_tikz USE_EXTERNAL_TIKZ
包含PDF格式外部化tikz图形的文件夹(相对于输入文件夹)。
--svg_inkscape [SVG_INKSCAPE]
包含通过`svg`包的`\includesvg`命令由Inkscape生成的PDF文件。
这是通过将`\includesvg`调用替换为指向生成的`.pdf_tex`
文件的`\includeinkscape`调用来实现的。默认情况下,
这些文件和生成的PDF位于`./svg-inkscape`(相对于输入文件夹),
但如果在加载`svg`包时设置了不同的`inkscapepath`,
可以提供一个不同的路径(相对于输入文件夹)。
--config CONFIG 从`.yaml`配置文件读取设置。如果同时提供了命令行参数,
配置文件参数将被命令行参数更新。
--verbose 启用详细输出。
测试:
python -m unittest arxiv_latex_cleaner.tests.arxiv_latex_cleaner_test
注意
这不是Google官方支持的产品。