好的,我使用 Lyx 已经有一年了。我还没有真正深入研究过 LaTex/Tex 方面的东西。我对 XML + XSLT 有一点经验。它很好地将数据与表示分开了。(你甚至可以说将模型与视图分开了)。
假设我有一些与时间轴相关的信息。在 XML 中我会这样写:
<timeline title="Australian History>
<timepoint year="60000BC" event="Aboriginal Migration">Aboriginal Australians are believed to have first arrived on the Australian mainland by boat from the Indonesian archipelago.</timepoint>
<timepoint year="1606" event="First European Landing"> The first uncontested landing in Australia by Europeans was by Dutch navigator Willem Janszoon </timepoint>
<timepoint year="1770" event="British Claim"> James Cook charted the East Coast of Australia[1] for Britain and returned with accounts favouring colonisation at Botany Bay (now in Sydney). </timepoint>
<timepoint year="1788" event="First Fleet Arrival"> A First Fleet of British ships arrived at Botany Bay in January, to establish a penal colony. </timepoint>
<timepoint year="1901" event="Federation"> The Commonwealth of Australia came into being when the Federal Constitution was proclaimed by the Governor General, Lord Hopetoun, on the 1st of January.</timepoint>
</timeline>
(数据源对于上面的例子)。
然后我会编写一个 XSL 转换程序,将其转换为某种易于阅读的格式。也许是一个小型 SVG 图表,或者一个具有适当格式的网站。
在 Latex 中是否有类似的将内容与格式分开的概念?(然后我可以将其嵌入 Lyx)。我认为 LaTex 的座右铭之一是“整理内容,让系统处理格式。”(或类似的东西)。
我设想,如果没有其他办法,那么可以编写一个 XSLT 来将 XML 转换为 Tex,然后可以包含该 Tex。(每次导出 Lyx/Tex 时都可以执行此 XSLT)。但这很丑陋。必须有一种更好的方法来使用某种形式的 Tex 可扩展标记。
答案1
LaTeX 已经将内容与格式分开。例如,的外观\section{ABC}
可能因包和类而异。还可以轻松地将您的 XML 示例转换为更像 LaTeX 的内容,例如
\begin{timeline}{title=Australian History}
\timepoint{year=60000BC,event=Aboriginal Migration,text=Aboriginal ...}
\timepoint{...}
\end{timeline}
现在您只需编写合理的定义即可获得合适的格式。
LaTeX 和 XML 标记之间的主要区别在于,前者不太严格,因此更适合正常的、或多或少混乱的人类文档,因为并不是所有内容都可以在 XML 模型中压缩。
答案2
当然,你也可以使用 XSLT 从 XML 生成 TeX 进行排版。这就是MathML 规范的 PDF 版本例如生成。但细节很大程度上取决于用于输入的 XML 词汇(当然也取决于输出的排版要求)。
如果您不想在输入文档中直接使用 XML 语法,那么许多包的 keyval 接口允许使用更自然的语法来输入属性声明。有关 LaTeX3 如何改善层间分离的想法,请参阅 Frank 的回答LaTeX3 与纯 Lua
答案3
有datatool
该包可让您创建数据库并提供用于操作和访问数据的工具。
答案4
一个可能适合也可能不适合的选择是叶斯特。这是一个允许您从 yaml 文件和字符串模板创建 TeX 文件的工具。(您还可以写入 markdown、html 和许多其他格式)。我使用它来保持我的简历的 TeX 和 HTML 版本同步。(或者更确切地说,当我开始推出我的简历的新版本时,我会这样做……)