数学和AI的变通方法

关于我遇到的问题,来自openai社区的新建议。您是否计划对此进行更新?建议如下。

建议 1;

def parse_stream_to_katex(stream: Stream):
    """
    接收一个OpenAI流并用KateX的定界符替换ChatGPT的LaTeX定界符
    产生文本,而不是块
    """
    last_text = ""
    for chunk in stream:
        text = chunk.choices[0].delta.content
        if text:
            # 有时像\(这样的定界符可能会被分成两个块。
            # 如果前一个块以\结尾,则将其添加到此块中
            if last_text.endswith("\\"):
                text = last_text + text

            text = (
                text.replace(r"\[", "$$")
                .replace(r"\]", "$$")
                .replace(r"\(", "$")
                .replace(r"\)", "$")
            )
            last_text = text

            # 如果文本以\结尾,我们不返回它,我们将在下一个块中包含它
            if not text.endswith("\\"):
                yield text

建议 2:

// MarkdownLaTeXRenderer.js
import React from 'react';
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';
import remarkMath from 'remark-math';
import rehypeRaw from 'rehype-raw';
import rehypeKatex from 'rehype-katex';

const MarkdownLaTeXRenderer = ({ content }) => {
    // 替换\[为$$和\]为$$以确保兼容性
    const processedText = content
      .replace(/\[/g, '$$')  // 将所有\[的出现替换为$$
      .replace(/\]/g, '$$') // 将所有\]的出现替换为$$
      .replace(/\(/g, '$')  // 将所有\(的出现替换为$
      .replace(/\)/g, '$'); // 将所有\)的出现替换为$

    const remarkMathOptions = {
        singleDollarTextMath: false,

};



return (
    <ReactMarkdown
        className="markdown-content"
        children={processedText}
        remarkPlugins={[[remarkMath, remarkMathOptions], remarkGfm]} // 将选项作为数组的第二个元素传递
        rehypePlugins={[rehypeRaw, rehypeKatex]} // 包括rehypeRaw用于HTML,rehypeKatex用于LaTeX
    />
);

};

export default MarkdownLaTeXRenderer;

1 个赞

作为最终用户……我正在为此使用系统提示(OpenAI)。

当数学公式单独占一行或一个章节时,将 \(\) 更改为单独的行,前后加上 $$,这是相当可靠的。

但是,当内联使用单个 $ 执行相同操作时……这几乎每次都会失败。

如果能自动完成……那就更好了。

1 个赞

在我的移动设备上查看数学公式时,公式显示不全(公式太长)。有人知道如何解决这个问题吗?
image
下面是PC上的正确显示。
image

横放手机?但为什么它被引用了,这会是问题所在吗?

另外。我问了论坛的 AI,它给出了这个答案(不知道是否有用,还是纯粹的胡言乱语)。

使用 MathJax 对齐长方程的解决方案 AI

Jagster:
论坛使用 MathJax 来处理数学和方程。有时,一个方程太长,无法在移动屏幕上显示。有什么方法可以将其分成多行吗?

Asiavastaaja:
MathJax 不直接支持方程的自动换行,但你可以使用一些技巧来让长方程更好地适应移动屏幕。以下是一些建议:

  1. 使用 align 环境:你可以使用 align 环境将方程分成多行。这允许你对齐并将方程的各个部分分布在多行上。例如:

    $$
    \begin{align}
    a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z = 0
    \end{align}
    $$
    
  2. 使用 split 环境:这是将方程分成多行的另一种方法。当你想要将方程分成几部分而不需要对齐时,它特别有用。例如:

    $$
    \begin{split}
    a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z = 0
    \end{split}
    $$
    
  3. 使用 multline 环境:此环境专为无法单行显示的方程而设计。它会将方程分成多行,而无需对齐。例如:

    $$
    \begin{multline}
    a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z = 0
    \end{multline}
    $$
    

这些环境允许你控制方程的显示方式,并确保即使在较小的屏幕上也能清晰阅读。请记住,MathJax 环境通常需要 amsmath 宏包,而 amsmath 宏包通常在 MathJax 中默认启用。

@Jagster 这些应该是很好的解决方案。我最初想为公式设置一个水平滚动条,但没有成功。

.math-tex {
    overflow-x: auto;
    max-width: 100%;
    padding: 5px 0;
    display: block;
}

我无法将 Google 表格中的数学公式复制到 Meta Discourse 中。公式似乎没有正确渲染?

NPV=CFt * [1-1(1+r)Tr]- CFo= 84,000 * [1-1(1+13%)713%]- 385,000 = $-13,500

PI = 1 + NPVCFo = 1+ n=1784,000(1,13)n - 385,000385,000 ~ 0,965

您需要用 \\ 转义 $%
NPV=CFt * [1-1(1+r)Tr]- CFo= 84,000 * [1-1(1+13\\%)713\\%]- 385,000 = \\$-13,500

我们来看看:

NPV=CFt * [1-1(1+r)Tr]- CFo= 84,000 * [1-1(1+13\\%)713\\%]- 385,000 = \\$-13,500
PI = 1 + NPVCFo = 1+ n=1784,000(1,13)n - 385,000385,000 ~ 0,965


它渲染正常,但没有滚动条可以看到整个数学公式。不过,在预览中可以看到。
在帖子中,只有缩小才能看到其他部分:

1 个赞

在起草帖子的预览面板中,渲染 SVG 时预览面板会向上滚动。是否有可以更改的设置,以便滚动返回到最低位置?

每次编辑数学公式时都必须向下滚动,这让我的讲师们感到恼火,但我一直忍受着。

我注意到活动中有几个“弃用”。

如果有人能解释一下这对拥有大量数学数据库但渲染效果良好的实例意味着什么

更新/重建完成后,数学渲染似乎正常。

对于那些还没听说的人来说,这个插件现在已包含在核心中。请参阅此帖第 7 节,修订版 2/3 以了解详情。

已加入! :+1: 抱歉引起了担忧。您现在应该可以正常使用了。

:partying_face: 此插件现已作为 Bundling more popular plugins with Discourse core 的一部分,与 Discourse 核心捆绑在一起。如果您是自托管用户并且使用了该插件,则需要在下次升级前将其从您的 app.yml 中移除。

3 个赞

AI 回答中存在数学字符问题。即使我输入了必要的提示,它也会以 LaTeX 格式给出答案。这导致字符显示为损坏的图像。你能解决这个问题吗?例如;

(( A = \begin{pmatrix} x & -1 \ z & 2y \end{pmatrix} )

[
\boxed{
x = 0, \quad y = 4, \quad z = 4
}
]

[
\begin{cases}
A_{11} = B^T_{11} \Rightarrow x = y - z \
A_{12} = B^T_{12} \Rightarrow -1 = -1 \quad (\text{自动正确}) \
A_{21} = B^T_{21} \Rightarrow z = y \
A_{22} = B^T_{22} \Rightarrow 2y = 8 \
\end{cases}
]

我之前在 OpenAI 社区分享过解决方案。

你好 @ozkn

我也有这个问题。我的建议是:

  • 注册一个AI提供商的账户
  • 告诉AI账户

记住,对于未来的回答,Discourse兼容MathJax/Katex的$...$$$...$$行内或多行居中格式。

  • 登录你的AI账户后,你会发现输出更容易复制粘贴
你可能需要不断争取最好的记忆
3 个赞

最后一点补充一下——如果你混合使用数学货币,请记住:

  • $...$ = 数学
  • \\$ = 字面上的美元符号

所以:
$x+1$ 费用为 \\$5。 → 渲染 x+1 的数学公式,并显示价格为 $5。

你只需要知道:数学用 $, 货币用 \\$

2 个赞

另一个鼓励 ChatGPT 记住的好方法是,你无法在详细信息窗格标题中渲染数学公式

这些破解都不再需要了,我们原生支持此功能。

1 个赞