好吧 - 让我简单直接地说一下:
如何在需要脚本/解析支持的自定义 c/c++ 应用程序中利用 tex/latex 解析机制?
我看到两种方法:一种是提取解析代码并将其放在自定义应用程序中并从那里开始,或者第二种方法 - tex / latex 可扩展,编写一个新的文档样式,其中命令定义为 C / C ++ 调用的占位符。
背景是这样的:我有这个赋格曲音乐音符解析器,解析音乐音符并在 MIDI 上播放它们。基本音符解析器在 CFugue 中运行良好。但是,我们需要添加对用户的支持,以便能够定义和扩展他们自己的命令(就像 tex/latex 允许其用户那样)。其他替代脚本机制 - 我不喜欢它们。没有什么能比得上这种 tex 风格的脚本的简单性和可扩展性。
因此,我不想重新发明轮子,而是想重用现有的 tex 框架,以便在解析和执行命令时,它们可以执行我想要的其他操作(可能是在设备上播放 midi 命令,或将 midi 音符写入磁盘上的文件),而不是计算纸张或书籍的布局。
从这个意义上讲,我不确定 tex/latex 代码是否足够模块化,可以直接放入第三方应用程序中并通过配置输出设备直接重用它。因此,定义自定义命令的第二种选择似乎是可行的方法。
例如,如何编写一个可以加载共享库(Windows 上的 dll)并调用其某个方法的命令?
\newcommand{Call_C_Method}[2]{\LoadSharedDll{#1}\GetProcAddress{#2}\SomeHowCalltheProc}
Call_C_Method{\usr\bin\shared.dll}{PlayMidi}
我知道从使用角度来看这不是 tex/latex 的设计目的 - 但是,作为一名开源开发人员和架构师,我希望 tex/latex 代码设计如果设计正确的话肯定能够做到这一点。
在这些方面是否已经完成或存在任何工作?或者除了开始深入研究 tex 代码并查看可以做些什么来重新设计它以使其足够模块化以将解析与输入和输出设备分开之外没有其他方法?
换句话说,如何让 tex/latex 不生成文件上的 postscript 命令,而是生成其他设备可以理解的一些命令?
谢谢。
答案1
这是一个稍微不同的方法。
|application|->|texworks|->|TeX|->|writes to file|->|application reads files|
|executes .dlls etc |
您需要将问题分为 30 年不变的部分(TeX 和宏)以及不断变化的短暂和虚无部分(即您的应用程序、.dll、GUI、Windows 等)。
您的应用程序调用编辑器,例如 TeXWorks。您的包用于处理由 TeX 宏组成的脚本并将您想要的任何内容输出到文件(操作系统命令等)。然后您的应用程序进一步处理这些文件。
另一种方法是使用浏览器 GUI。
|Browser GUI|->|your application|->|TeX|->|writes to file|->|application reads files|
|executes .dlls etc |
| feedback to browser |
浏览器界面用于获取用户输入(即 TeX 部分)。然后它将信息发送到服务器,服务器随后将写入文件以供应用程序使用。应用程序调用 TeX 引擎,引擎依次解析输入并将输出写入文件。应用程序将对此进行进一步处理。浏览器界面比其他 GUI 更容易编写,尽管这意味着要启动一些
localhost
,但这是一项非常容易完成的任务。您还可以轻松设计无边框浏览器应用程序。
当前的安全模型,几乎不可能.dll
通过 TeX 引擎激活。
答案2
好的。在网上搜索了将近一周后,终于找到了接近我想要的东西。既然我找到了答案,我只是想在这里分享给那些正在寻找类似我的需求的人:也就是说,一个可以定制以产生自己的输出的 C++ Tex/Latex 解析器。
我在网站上发现了这个:http://jblevins.org/log/xml-tools该工具的名称为:Tralics。那里的描述如下:
特拉利奇是用 C++ 编写的,也可以直接解析 LaTeX 源代码(而且速度非常快)。
我能够使用 mingw32 在 Windows 上顺利下载并编译它。代码是 C++ 的,非常小。非常适合理解和自定义它。几个基于侦听器的自定义输出渲染类可能是最好的选择。