LaTeX-Distributions 中的 5 年定时炸弹?

LaTeX-Distributions 中的 5 年定时炸弹?

有一件非常奇怪的事情:安装或发布五年后,各种发行版中的 TeX 似乎都拒绝编译,原因仅仅是因为它太旧了。

今天早上我们有一个问题: Lyx 突然停止工作,完全迷失

但 TeX.se 中还有更多:LaTeX 源文件已超过 5 年。XeLaTeX 失败

看看这篇博文:http://blog.eddsn.com/2011/06/latex-source-files-more-than-5-years-old/ 有数百人向该博主表示感谢。

难道各种 TeX 发行版真的如此糟糕以至于仅仅因为存在五年多了就停止工作了吗?  

请问,任何了解 TeX 的人都可以去看看这些情况下发生了什么吗?如果我的假设是正确的,那么这对 TeX & Friends 来说将是一个非常大的缺点,应该予以纠正。

答案1

不,TeX 发行版不会停止工作。

是的,LaTeX 曾经有一个保护机制,建议用户更新其 LaTeX 内核。在 LaTeX2e 发布后的最初几年里,每年都会发布更新,并检查内核是否超过五年。

此类检查仅在创建格式时执行,只要忽略错误消息并按回车键即可创建格式。据我回忆,2010 维护版本已禁用该检查。

然而,包含五年历史的 LaTeX 内核的 TeX 发行版已经无可挽回地过时了,应该进行更新。


以下是相关代码ltvers.dtx

% Check that the format being made is not too old.
% The error message complains about `more than 5 years'
% but in fact the error is not triggered until 65 months.
%
% This code is currently not activated as we don't know if we already
% got to the last official 2e version (due to staff shortage or due to
% a successor (think positive:-)).
% \changes{v1.0i}{2001/06/04}{Check for old format disabled}
% \changes{v1.0k}{2004/01/28}{Check for old format made 5 years (pr/3601)}
% \changes{v1.0l}{2009/09/24}{Stop checking for old format}
%    \begin{macrocode}
\iffalse
\def\reserved@a#1/#2/#3\@nil{%
  \count@\year
  \advance\count@-#1\relax
  \multiply\count@ by 12\relax
  \advance\count@\month
  \advance\count@-#2\relax}
\expandafter\reserved@a\fmtversion\@nil
%    \end{macrocode}
% |\count@| is now the age of this file in months. Take a generous
% definition of `year' so this message is not generated too often.
%    \begin{macrocode}
\ifnum\count@>65
  \typeout{^^J%
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
!  You are attempting to make a LaTeX format from a source file^^J%
!  That is more than five years old.^^J%
!^^J%
!  If you enter <return> to scroll past this message then the format^^J%
!  will be built, but please consider obtaining newer source files^^J%
!  before continuing to build LaTeX.^^J%
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J%
}
   \errhelp{To avoid this error message, obtain new LaTeX sources.}
   \errmessage{LaTeX source files more than 5 years old!}
\fi
\let\reserved@a\relax
\fi
%    \end{macrocode}

我在磁盘上发现一个非常旧的 LaTeX 内核(2001/06/01),检查处于非活动状态(但有 30 个月而不是 65 个月)。从更改注释中我们可以推断出,2004 年奖金期从两年延长到五年,但五年后内核被认为足够稳定,可以再次禁用检查。

因此只有经过鉴定的内核2009/09/24 的内核版本受到影响。但是,正如我之前所说,如果内核的发布日期早于 2007/06/30,则意味着与其一起发布的 LaTeX 系统真的过时了。

正如约瑟夫赖特 (Joseph Wright) 所评论的那样,除了对计算机时钟采取行动,在开始格式编译之前将年份更改为 2009 年之外,没有什么魔术可以避免在格式编译期间进行检查;然后可以将时钟重置为当前日期。

答案2

您说得完全正确,这是一个故意设置的定时炸弹,目的是鼓励更新,但如上所述,这是 LaTeX2e 内核的功能,而不是 TeX 本身的功能。我也完全同意您说的,这在当今是一个非常糟糕的想法,如果我负责这个项目,我会认为这是一个关键的、令人震惊的错误。

(免责声明:我有偏见,我自己也曾被这个问题困扰过,我们花钱组装的系统包含一个报告制作组件,由于各种原因,这些系统在无人值守和没有在线连接的情况下运行。从中风中恢复过来后,我只是解除了武装,\errmessage重新创建了我们定制的 TeX 迷你发行版。世界上所有的错误修复都不值得冒险改变你已经知道可以很好地满足你的目的的东西的行为。)

相关内容