file命令如何区分文本文件和LaTeX文件?

file命令如何区分文本文件和LaTeX文件?

我有许多文件(Jupyter 笔记本.ipynb),它们是文本文件。所有这些都包含一些 LaTeX 标记。但是当我跑步时file,我得到:

$ file nb_*          
nb_1.ipynb:      ASCII text
nb_2.ipynb:      ASCII text
nb_3.ipynb:      ASCII text, with very long lines
nb_4.ipynb:      LaTeX document, ASCII text, with very long lines
nb_5.ipynb:      text, with very long lines

这些如何file区分呢?我希望所有文件都具有相同的类型。


(为什么文件应该具有相同的类型?我正在将它们上传到在线系统进行共享。系统以某种方式对它们进行分类并以不同的方式对待它们,我不可能更改这一点。我怀疑该平台使用file或可能libmagic在内部并希望解决这个问题。)

答案1

文件类型识别由所谓的驱动魔法 模式。这用于分析的魔术文件 TeX 系列源代码包含许多宏名称,这些宏名称导致文件被分类为乳胶。每场比赛都会分配一个 力量,例如 15 表示\begin,18 表示 \chapter。这使得启发式方法对于误报(例如恰好使用这些名称定义自己的宏的 Plain TeX 或 ConTeXt 文档的错误分类)更加稳健。

答案2

我发现一个字符串似乎将file文件分类为 LaTeX:

$ cat text
a
b
$ cat latex
a
\begin
b
$ file text latex
text:  ASCII text
latex: LaTeX document, ASCII text

因此,至少我可以通过向当前分类为文本的文件添加一些环境来强制所有文件具有相同的类型。

相关内容