是否有“确凿证据”来区分 ConTeXt 和普通 TeX

是否有“确凿证据”来区分 ConTeXt 和普通 TeX

我正在编写一个工具来简化一些排版工作,但我无法区分普通 Tex 和 ConTeXt。

LaTeX 很容易通过命令识别\documentclass(或\documentstyle对于旧文档),但是我很难找到“确凿证据”来区分 ConTeXt 源和普通 TeX 源。

看起来这\starttext . . . \stoptext对在 ConTeXt 中很常见,但不能保证。有没有更好的,或者更好的组合?

我知道由于 TeX 的特性,编写一个过滤器来达到 100% 准确的效果是不可能的,但是 90-95% 的准确率仍然会有很大帮助。

答案1

任何\start...足够好如果您不关心老式的 AMSTeX 文件,则将某些内容标识为 ConTeXt 而不是 Plain。

如果您想要完整的命令,ConTeXt 中有相当多的顶级文档分隔符:

常用的文档分隔符

特殊页面环境

这些会创建单独的页面,但当然这样的页面可能构成整个文档

  • \startTEXpage— 与其所包含的 TeX 输出完全匹配的页面
  • \startMPpage— 与其包含的 MetaPost 图形完全匹配的页面

部分项目系统

其他辅助文件

  • \startmodule— 模块和环境其实是一样的。不过,一般来说,环境是这样写的特别指定,而模块被编写出来是为了被(其他人)重复使用。
  • \startxmlsetups— ConTeXt 可以将 XML 作为输入,并且可以将一个包含 XML 设置的文件作为输入,该文件可以告诉它如何将 XML 转换为 TeX。

顺便说一句,LaTeX 文档不需要包含{document}环境。如果在 之前生成任何输出,LaTeX 将生成错误\begin{document},而 Context 不会;但是,当然,没有输出的文档仍然有效(编译时没有错误)。如果您使用 访问原始命令\end\makeatletter\@@end则可以结束文档而不必求助于 LaTeX 的\end{document}

查尔斯的笔记我制作了这个 CW,因为到目前为止,它包含的大部分知识都来自下面的评论。

答案2

值得一提的是,vim 使用以下逻辑来对具有.tex扩展名的文件进行分类。

  • 忽略文件开头所有以注释开头的行。
  • 在接下来的 1000 行中搜索以下模式:

    let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>'
    let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>'
    
  • 如果文件包含任一模式,则使用 LaTeX 或 ConTeXt 对其进行分类。

  • 否则,将其归类为g:tex_flavor(默认为纯 TeX,但可以由用户可以覆盖)。

来源:s:FtTex()function infiletypes.vim

相关内容