【问题标题】:Possibilities to embed Latex in QML在 QML 中嵌入 Latex 的可能性
【发布时间】:2012-11-26 15:45:50
【问题描述】:

我正在使用 QML(带有 C++ 后端)做一个类似于this one 的演示系统。

我希望能够包含一些 Latex 代码来显示一些数学(仅需要最低的 Latex 功能,例如和、分数、超和子带以及数学字体)。

我认为这样做的可能性如下:

  • 使用 latex2e
    1. 将 Latex 代码编译为 DVI 文档(使用 latex
    2. 将 DVI 转换为 SVG(使用 dvisvgm
    3. 在 QML(也支持 SVG)中使用 Image 显示此内容
  • 使用 MathJax
    1. 将 Latex 代码包装在一个小的 HTML 文件中 + 包含 MathJax JS 库
    2. 使用 WebKit 为 QML 显示此内容
  • 自定义解决方案 (C++):
    1. 编写或包含现有的最小 Latex 数学解析器
    2. 用自定义绘画写QDeclarativeItem

还有其他我看不到的解决方案吗?我更喜欢第一个解决方案,因为第二个听起来太重,第三个太难了。

我发现数学公式的基线存在以下问题:我希望能够包含内联公式(在段落中)。目前,文本段落是使用 QML Text 元素呈现的。是否有可能在具有指定基线的 Text 元素中包含图像(可能使用 HTML img 元素)?另外,如何确定渲染的 Latex 文档的基线?

注意:预渲染 Latex 代码的时间没有问题。我将缓存已渲染的公式,因此在演示文档中包含的每个公式上调用 latex + dvisvgm 应该没有问题。

还请注意,我使用了预处理器(我不是手动编写 QML 代码,而是生成它)。所以我不需要 Latex 代码的 QML 元素,但我可以生成一个带有 Image 元素的 QML 代码 sn-p (对于第一个解决方案)。这应该可以简化嵌入渲染图像。

在使用内联 Latex 时,我也不需要支持包装公式。 (Latex 在编写内联公式时会这样做,但我只使用我不想被包装的小公式。)

【问题讨论】:

  • 我很想知道您采用的方式以及它是否适合您的目的,因为我们也在解决这个问题。
  • 我使用了方法 1。为了将渲染图像嵌入到段落中(内联),我将每个段落的文本拆分为单个单词,并使用自定义流布局算法手动放置它们。然后可以手动定位图像。如果我有时间,我会写这个作为一个足够详细的答案。顺便说一句,SVG 不能很好地工作,我为此使用了光栅化 PNG 格式。我的应用可以在缩放图像时重新调整渲染的分辨率(即重新转换图像),因此您几乎不会注意到它是光栅化图像。

标签: qt latex qml text-rendering


【解决方案1】:

我认为这是三个不错的选择,我想不出任何其他方法。

听起来您需要将公式与一些文本段落对齐,因此我认为选项 2 是一个很好的方法。

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

干杯!

【讨论】:

    【解决方案2】:

    另一种选择是使用富文本 QML 组件,它也支持图像(例如 TextEdit)而不是图像 - 然后您可以将它们与普通文本内联。

    【讨论】:

    • 我试过这种方法,但问题是图像总是在基线处垂直对齐。当图像是带有子集字母或类似内容的乳胶公式时,它应该低于基线,这是行不通的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    相关资源
    最近更新 更多