我的 aspell 版本。
aspell --version
@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.7-20110707)
简单的 tex 文件。
cat /tmp/test.tex
\documentclass{article}
\title{First \LaTeX Document}
\begunn{document}
\maketitle
Hello, \LaTeX!
\end{document}
begunn
您可以看到test.tex 文件中的 单词拼写错误。
现在用 aspell 命令检查它。
aspell --lang=en --mode=tex check /tmp/test.tex
aspell 命令没有输出任何内容,为什么?
答案1
手册aspell
位于http://aspell.net/man-html/index.html
首先,从http://aspell.net/man-html/Spellchecking-Individual-Files.html#Spellchecking-Individual-Files
如果没有指定 mode 选项,Aspell 将使用文件的扩展名来确定当前模式。如果扩展名是 .tex,则将使用 tex 模式;如果扩展名是 .html、.htm、.php 或 .sgml,则将使用 sgml 模式检查文件;否则将使用 url 模式。
http://aspell.net/man-html/Notes-on-Various-Filters-and-Filter-Modes.html#Notes-on-Various-Filters-and-Filter-Modes描述了不同的过滤模式。这些包括
--mode=none
4.4.1.1 无过滤模式
无模式正如其名称所示。它会关闭所有过滤器。
和
--mode=tex
4.4.1.6 TeX/LaTeX 过滤器
tex(全部小写)过滤模式会跳过 TeX 命令和某些命令的参数和/或选项。
因此,无论是否使用模式开关,运行时--mode=tex
都会检查文件中不是宏名称的部分。特别是,在你的示例文件上
aspell --lang=en check test.tex
aspell --lang=en --mode=tex check test.tex
两者都不返回错误,而
aspell --lang=en --mode=none check test.tex
捕获所有宏,包括有效的宏,例如documentclass
。
运行 LaTeX 本身是检查宏构造名称有效性的最快方法。在你的文件中latex test
给出
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 84 language(s) loaded.
(/usr/local/texlive/2017/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2017/texmf-dist/tex/latex/base/size10.clo))
! Undefined control sequence.
l.3 \begunn
{document}
?
表示\begunn
未知。
确实存在类似 Latex 的 lint 程序,请参阅有没有与 LaTeX 的 lint 相当的程序?,它们会捕获一些不正确的构造,但它们不会告诉你从系统构建方式来看,宏名称是否出于根本原因而被 LaTeX 所识别。请参阅如何对未定义的控制序列进行 lint?进行讨论。