【问题标题】:Mix of text and math formula on HTML pageHTML 页面上的文本和数学公式的混合
【发布时间】:2021-12-07 14:34:30
【问题描述】:

我有一个任务要在 HTML 页面上写这样的东西:

数学标记(HTML)不好,因为它无法处理"/begin()-/end()" 部分之间的标记中断。所以,创建这样的东西(在 LaTeX 上工作得很好):

$
\left\lbrace
\begin{matrix}
  $Option1$\\
  $Option2$
\end{matrix}
\right\rbrace
$

在 HTML 中:

<p><span class="math inline">\(\left\lbrace
\begin{matrix}\)</span>
Option1
<span class="math inline">\(\\
\)</span>
Option2
<span class="math inline">\(\end{matrix}
\right\rbrace\)</span></p>

不工作。 /begin 和 /end 处于不同的跨度中,它正在破坏 LaTeX 内部进程。我需要从数学标签中取出选项,因为我需要对它们应用我自己的格式。有趣的部分:如果我会使用 CSS

.math {
}

它可以改变颜色和大小,但不能改变字体家族或斜体/粗体格式。

使用 HTML 表格结构也无济于事,因为 {} 符号没有覆盖选项部分的全部高度(元素数量可能增加到 7 个)。

因此,我在这里没有可能的解决方案。有人可以分享我如何完成这项任务的想法吗?如果可能的话,我想避免使用 SVG/PNG 或任何其他图像类型来支持不同的屏幕尺寸。

【问题讨论】:

    标签: html css mathjax


    【解决方案1】:

    在this answer 中,Davide Cervone 表示:

    MathJax 仅实现用于数学布局的宏,而不是文本布局,因此不支持 \begin{tabular} 和 \begin{center} 之类的东西。相反,您可以使用数组环境 [...]

    这就是我们不能使用所有环境的原因。以下代码应该可以工作:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>MathJax</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
    </head>
    
    <body>
    \(
      \begin{array}{ccc}
        \left\lbrace
        \begin{matrix}
          \mathrm{Option1}\\
          \mathrm{Option2}
        \end{matrix}
        \right\rbrace & %
    %
        your\ content & %
    %
        \begin{matrix}
          \mathrm{type1}\\
          \mathrm{type2}\\
          \mathrm{type3}
        \end{matrix}\\
      \end{array}
    \)
    </body>
    </html>
    

    片段:

    <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
    
    \(
      \begin{array}{ccc}
        \left\lbrace
        \begin{matrix}
          \mathrm{Option1}\\
          \mathrm{Option2}
        \end{matrix}
        \right\rbrace & %
    %
        your\ content & %
    %
        \begin{matrix}
          \mathrm{type1}\\
          \mathrm{type2}\\
          \mathrm{type3}
        \end{matrix}\\
      \end{array}
    \)

    我在上面链接的同一篇文章还建议尽可能使用 HTML 表格,而不是 LaTeX arrays 或其他。以下嵌套了两组&lt;table&gt;s 的草图使渲染大括号更加复杂,但它仍然可以。无论如何都不应超过&lt;table&gt; 的使用,并且仅限于以表格格式显示数据。

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>No MathJax</title>
    <style>td.braces{font-size:200%}</style>
    </head>
    
    <body>
    <table>
      <tr>
        <td>
          <table>
            <tr>
              <td rowspan="2" class="braces">{</td>
              <td>Option1</td>
              <td rowspan="2" class="braces">}</td>
            </tr>
            <tr>
              <td>Option2</td>
            </tr>
          </table>
        </td>
        <td>your content</td>
        <td>
          <table>
            <tr>
              <td>type1</td>
            </tr>
            <tr>
              <td>type2</td>
            </tr>
            <tr>
              <td>type3</td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
    </body>
    </html>
    

    片段:

    td.braces{font-size:200%}
    <table>
      <tr>
        <td>
          <table>
            <tr>
              <td rowspan="2" class="braces">{</td>
              <td>Option1</td>
              <td rowspan="2" class="braces">}</td>
            </tr>
            <tr>
              <td>Option2</td>
            </tr>
          </table>
        </td>
        <td>your content</td>
        <td>
          <table>
            <tr>
              <td>type1</td>
            </tr>
            <tr>
              <td>type2</td>
            </tr>
            <tr>
              <td>type3</td>
            </tr>
          </table>
        </td>
      </tr>
    </table>

    这里只有一行CSS!


    最后,如果您愿意,请添加一些关于您认为应该如何实现表意文字的信息,以便我们对其进行改进!

    【讨论】:

    • 嗨,@MattAllegro。非常感谢您的回答。是这样想的,但仍然希望确实存在一些使用 MathJax 的解决方法。无法使用第一个解决方案,因为它正在从 Internet 下载脚本。我使用它的安装无法访问互联网:(
    • 关于表格:是的,我已经在使用这种方法了。但问题是动态行数。所以,仅仅放置 200% 对我来说并不好。目前我正在使用脚本来计算行数并根据它更改字体大小。如果可以将字体大小设置为列行高度的 100% 会更容易一些,但此选项不存在。一直希望通过使用 MathJax 来解决它(编写脚本对于这个问题来说有点复杂),但看起来它也不是一个选项。不过,非常感谢您提供的信息。它确实证实了我的想法。
    • @AllertGen 不客气!您还可以下载 MathJax js 文件并链接到您的(子)文件夹中的本地副本。
    • @AllertGen 另外,为了缩放大括号,svg 方法是this article 中列出的最后一种方法。
    猜你喜欢
    • 2014-08-20
    • 2011-03-28
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多