为什么单冲程和双冲程引擎参数都有效?

为什么单冲程和双冲程引擎参数都有效?

这似乎是一个愚蠢的想法。它确实非常迂腐。我花了整个下午的时间试图弄清楚这一点。

背景

TeX 直播

我今天查看的所有引擎都在其-helpman页面中列出了单破折号标志。例如,pdftex -helpsays-shell-escape是解除束缚 的方式\write18。但是,双破折号标志也可以使用,例如--shell-escapealso frees \write18

我浏览了一些源代码库,查看了标志的解析位置,但我对它们一无所知。一个很好的例子是Web2c变更日志。它看起来像是-shell-escape1997 年添加的。

7.0(1997 年 2 月 6 日)

如果-shell-escapeshell_escapetexmf.cnf启用,\write18{str}则将 str 传递给system(3)进行处理sh

十几年过去了,--shell-escape似乎已经存在了一段时间了。

2009(针对 TeX Live 2009,2009 年 10 月 13 日)

--enable-write18并被--disable-write18接受为--shell-escape和的同义词--no-shell-escape,以与 MiKTeX 兼容。

麦金塔电脑

MacTeX 似乎使用双破折号标志。然而,同一新闻稿中提到,TeX Live 在 2010 年就使用了双破折号标志。

微特克斯

MiKTeX 似乎使用了双破折号一段时间。然而,查看旧代码需要比我想象的还要多的侦探工作

问题

我有几个,但它们都紧密相关。

  • 为什么要同时使用两者?是为了兼容性吗(这似乎是最明显的原因)?
  • 为什么一开始会同时使用这两种语言?是风格上的差异,还是有技术原因(例如getopts无法处理长选项)?
  • 事情什么时候发生变化的?

如果您知道我可以在源代码库的哪个地方了解这些内容,我很乐意听听。我并不是想说哪个更好;它们都有效,所以都是正确的。我只是对这一切背后的历史感到好奇。

答案1

今天早上我没能追查到所有历史记录,但我记得最初 tex 没有选项。当添加选项时,例如tex -ini替换旧的单独程序,initex它们被添加了一个破折号。

posix 和 linux 建议使用两个破折号来表示多字母选项,并且这--help应该适用于所有应用程序

https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html

由于没有冲突,web2c 选项处理已发生改变,现在在所有情况下都接受一个或两个破折号。

答案2

TeX live 中的 LuaTeX 解析命令行选项luainit.w使用getopt_long_only我们在文献中发现

获取opt_long_only()就好像获取opt_long(),但 '-' 以及 "--" 都可以表示长选项。

XeTeX 和 pdfTeX 在texmfmp.c我相信。

相关内容