和其他人一样,我通常使用模板来编写我的论文,其中包含我排版文档通常需要的所有内容(包、宏等)。但是,我的需求有时会发生变化,最后我发现自己加入了一些我并不需要的包。
我通常在序言中做的是\usepackage{P} % R
,其中 R 是包含包 P 的原因(例如命令集)。这样我就可以检查 R 是否适用于我的文档,如果不适用,则删除 P,但这仍然是一个相当繁琐的过程。有谁知道一个脚本可以检查文档中不需要的包或命令吗?
答案1
如果您有 Linux(或其他可以在 grep 上运行 bash 和 gnu 版本的系统),请编写如下脚本:
#!/bin/sh
> notneeded
> needed
fgrep '\usepackage' $1 | cut -f 2 -d '{' | cut -f 1 -d '}' |
while read a; do
egrep -v "\\usepackage(\[.+\])?\{$a\}" $1 > tmp.tex
latex -halt-on-error tmp.tex &&
echo $a >> notneeded || echo $a >> needed
done
如果您将其另存为unused.sh
,则运行它unused.sh mydoc.tex
,您将获得名为的文件notneeded
。
如果在同一行中有两个,则此操作会中断\usepackage
。可以使用-o
grep 进行更正。但是,更复杂的情况通常最好使用 perl 来完成。
E:还有更多需要考虑的。首先,可能存在未使用的 tikzlibaries。您可能有需要但不需要的\usetikzlibrary{shapes,arrows}
地方。arrows
shapes
然后,有些包虽然被使用但并不是“需要的”,因为“没有它就无法编译”,例如microtype
。OK,当你删除一个包时,你可以检查文档是否有任何变化,但是,hypersetup 会将 ModDate 放入 PDF 元数据中。
答案2
不可能,除非你写了一个脚本来收集全部命令和环境,并将其与您的文档进行比较。
答案3
打补丁\newcommand
来记录哪些包定义了什么,以及使用了什么,在这里可能有用,但我不确定这是否值得付出努力。只是不要包含太多。或者,忍受多几毫秒的不必要的编译时间。