我与一位数学家同事通信,他使用一款名为“The Publisher”的看似相当古老的软件来排版他的文档。该软件在发布过程中创建了一系列与 LaTeX 相关的文件,其中包括一个 .tex 文件。然而,这些文件的语法与当代 .tex 语法完全不同,因此无法通过 TeXLive 编译,Lyx 也无法解析它。
我在任何地方都找不到有关此软件的信息。我附上了一些示例文本,内容经过了删节,以防有人觉得语法很熟悉?这些文件可以转换为 Lyx 或现代 TeX 吗?
\Para[\ParaType{B}]\tyxtstxit[]Remark\tyxtstxendit[] 1. The preceding
approach [redacted] \newlinetag[]
\Endpara[]
虽然等式看起来像:
\InlEqn[]\LmthEqn[]
\Gamma _{0} [redacted]
\LmthEndeqn[]\EndInlEqn[]
更新:
我得到了一个名为“pub2latex”的旧实用程序,它仍然可以在 Linux 中使用,前提是将 .pub 文档导出为 .sgml 文件。不过转换不是直接转换为 LaTeX,而是转换为 LaTeX 和 XML 的某种组合。示例如下:
<topic>\subsection{Purposes}
\par
The object of interest [redacted]
<inline-equation>
<f>
Y</f>
</inline-equation> with piecewise smooth boundary <inline-equation>
<f>
<g>6</g>Y</f>
</inline-equation> of class <inline-equation>
<f>
C<sup>1</sup></f>
</inline-equation> in three dimensional space <inline-equation>
<f>
<blkbd>R</blkbd><sup>3</sup></f>
</inline-equation>.
我想知道是否有人见过这样的 TeX / XML 组合,以便现在可以解析和转换该文档?
附加历史信息:Publisher 在 Sun Sparc 工作站上运行。也许它是唯一在 Sparc 上运行的 TeX 客户端?
答案1
鉴于其历史,出版商实际上是一个非常令人印象深刻的项目。
好的,下面是我们的经验总结。首先,我将介绍我们处理 Publisher 手册中所述程序的经验。然后,我将介绍我最终做了什么。
我从我们的一位主要 Publisher 用户那里得到了这样的描述。他刚刚退休,正在努力将他的一些重要的东西转换成 LaTeX,以供后代使用。
在他的描述中,需要
publisher (the program)
sgmlmap (a programme)
atoutput.tex
attable.tex
booklat.mac
booklat.def (with our own additions)
我们将忽略这两个.tex
文件,因为它们仅提供一些.sgml
映射到的默认宏。我们通过 更改了其中的大部分booklat.def
。
人们可以从 内部进行一些清理工作
publisher
,但由于我之后要手动检查 LaTeX 代码,因此最终只需要在 中执行两个命令publisher
:
source grkmap
sgmrek
这会将 转换.pub
为.sgml
,在此过程中,它会将希腊字母转换为一些可供以后处理的代码。
理论上,现在应该能够通过以下方式转换为 LaTeX
sgmlmap -sgml file.sgml -def booklat
在实践中有一些注意事项:
<>
出来<
是>
&
作为&
- 输出为 LaTeX209
- 包含的图像丢失了!
不,它几乎从来没有编译成功过,而且没有任何问题。
让我们回到 SGML 格式。在该格式中,我们会发现(像 HTML)标签(<...>...</...>
)和实体(&...;
),它们标记了文档的格式。
让我们看一下帖子中的 SGML
<inline-equation>
<f>Y</f>
</inline-equation>
<inline-equation>
只是糖(并且没有映射到任何内容),
<f>...</f>
已经意味着排队方程。
<f><g>6</g>Y</f>
这是一个希腊字母,然后是Y
,当查找它时,
6
会将其映射到\partial
。
<f>C<sup>1</sup></f>
是简单的上标。
另一方面
<blkbd>R</blkbd>
在我所拥有的手册附录中没有定义,但从相应的 Publisher 输出的打印中,我们知道这应该映射到\mathbb{R}
。
因此处理这类事情是有趣的挑战。
如果我们回到
sgmlmap -sgml file.sgml -def booklat
然后booklat.def
包含某种转换列表,即如何将实体映射到 LaTeX 符号宏,如何将标签映射到完整含义上(请记住并非所有标签都是封闭的!)。例如
<fr><nu>1</nu><de>2</de></dr>
映射为
#deftag fr "\frac" /fr
#deftag /fr null
#deftag nu "{" /nu
#deftag /nu "}"
#deftag de "{" /de
#deftag /de "}"
—— 这是正常分数。
一个有趣的警告是sgmlmap
,它不允许标签和实体共享名称。因此,要使用sgmlmap
,通常必须预处理 SGML,重命名某些内容,然后将这些新标签或实体添加到booklat.def
。
我们不知道所使用的语法booklat.def
或它如何进行语法检查。
最后,我编写了自己的 perl 脚本,它进行了描述的所有替换booklat.def
(以及一些替换)。
即使在转换之后sgml
,tex
仍然使用额外的脚本来清理生成的 LaTeX 代码(我已经为通过 制作的文档准备好了它sgmlmap
,并且没有将它添加到转换脚本中。
答案2
我是 TexSet 的技术作家,后来 ArborText 也参与了这个项目的开发。Andrew Dobrowlski 是 TeX 方面的首席工程师之一,他当时在多伦多或渥太华工作。当时,一名初级工程师 Doug Maus 负责 Equation Editor 的开发。我最后知道 Doug 当时在沙漠西南部的某个地方。