在QML中嵌入Latex的可能性

7
我正在使用QML(带有C++后端)制作一个类似于这个的演示系统。
我想要能够包含一些Latex代码来显示一些数学公式(只需要最小的Latex功能,如求和、分数、上下标和数学字体)。
我看到以下几种可能性:
  • 使用latex2e
    1. 将Latex代码编译为DVI文档(使用latex
    2. 将DVI转换为SVG(使用dvisvgm
    3. 使用QML中的Image显示它(也支持SVG)
  • 使用MathJax
    1. 将Latex代码包装在一个小的HTML文件中+包含MathJax JS库
    2. 使用QML的WebKit显示它
  • 自定义解决方案(C++):
    1. 编写或包含现有的最小Latex数学解析器
    2. 编写带有自定义绘图的QDeclarativeItem
还有其他我没看到的解决方案吗?我更喜欢第一种解决方案,因为第二个听起来太重了,第三个太难了。
我看到以下问题与数学公式的基线有关:我想能够包含内联公式(在段落内)。目前,文本段落使用QML Text元素呈现。是否有可能在Text元素中包含图像(使用HTML img元素),并带有指定的基线?另外,如何确定渲染的Latex文档的基线?
注意:预渲染Latex代码的时间不是问题。我将缓存已经呈现的公式,因此在演示文档中包含的每个公式上调用latex+dvisvgm应该没有问题。
还要注意,我使用预处理器(不手动编写QML代码,而是生成它)。因此,我不需要一个Latex代码的QML元素,但我可以生成一个具有Image元素的QML代码片段(对于第一种解决方案)。这应该简化嵌入呈现的图像。
我也不需要支持使用内联Latex时换行。(当编写内联公式时,Latex会这样做,但我只使用小型公式,我不希望被换行。)

我很想知道你采取了哪种方法,以及它是否对你的目的起到了作用,因为我们也遇到了这个问题。 - gremwell
我使用了第一种方法。为了将渲染的图像嵌入段落中(内联),我将每个段落的文本拆分成单词,并使用自定义流式布局算法手动放置它们。然后可以手动定位图像。如果我有时间,我会写一个详细的答案。顺便说一句,SVG 的效果不是很好,我使用光栅化的 PNG 格式。我的应用程序可以在缩放图像时重新调整渲染分辨率(即重新转换图像),因此您几乎不会注意到它是光栅化的图像。 - leemes
2个回答

3

我认为这是三种好的选择,我想不出其他方法来做。

听起来你需要将公式与某些文本段落内联,因此出于这个原因,我认为选项2是一个不错的选择。

使用WebKit组件并不困难。我不确定你所说的“太重”是什么意思。

干杯!


0
另一个选项是使用富文本 QML 组件,它也支持图像(例如 TextEdit),而不是 Image - 然后您可以将它们与普通文本放在同一行。

我尝试过这种方法,但问题在于图像总是垂直对齐于基线。当图像是带有子集字母或类似物的LaTeX公式时,应该放在基线下方,但这并不起作用。 - leemes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接