将 a/(b+c) 解释为 \frac{a}{b+c}

将 a/(b+c) 解释为 \frac{a}{b+c}

是否可以让 LaTeX 或者类似的软件解释a/b\frac{a}{b}

写出来(x+1)/((x)(x+2))似乎比写下来容易得多\frac{x+1}{(x)(x+2)}

答案1

LaTeX 是 TeX 的格式之一。TeX 有\over原语。用法是$numerator\over denominator$$...{numerator\over denominator}...$。LaTeX 宏\frac定义(粗略地说)为\over原语:\def\frac#1#2{{#1\over#2}}

LaTeX 不隐藏 TeX 基元,因此你可以编写:

Writing out $x+1\over(x)(x+2)$ seems much easier than writing $\frac{x+1}{(x)(x+2)}$.

您可以将/字符设置为“数学活动字符”并写入:

{\catcode`/=13 \global\let /=\over}
\mathcode`/="8000

Writing out $x+1/(x)(x+2)$ seems much easier than writing $\frac{x+1}{(x)(x+2)}$.

当然,如果分数的范围小于整数公式,则必须使用{}来给出这个范围,例如${a/b}=c$,如Don Hosek的评论中所提到的。

答案2

很难解决使用文本替换的方法所带来的所有极端情况。一般来说,解析此类结构需要有限状态机才能正确呈现,例如

f(x)/g(x)

你描述的语法让我想起了数学,一种仅使用很少特殊符号来编写数学公式的语言。我不知道 LaTeX 中是否有 AsciiMath 的实现,但 ConTeXt 中有一个。这可能更接近您要寻找的。但是,我想引用此代码的实现者 Hans Hagen 在 TUG 2015 上的演讲(根据记忆)

“编写 AsciiMath 很有趣。你永远不知道会得到什么结果。”

\usemodule[asciimath]

\unexpanded\def\stopasciimath{\stopasciimath}
\unexpanded\def\startasciimath#1\stopasciimath{%
  \startformula
     \asciimath{#1}%
  \stopformula
}

\starttext

\startasciimath
    a/b * alpha/omega * f(x)/g(x) * (x+1)/(a*(b+c))
\stopasciimath

\stoptext

在此处输入图片描述

实际上,您可以在 LaTeX 中使用 ConTeXt 的 AsciiMath,而且只需付出很少的努力(但可能有限制)。

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math} % you have to use this for AsciiMath
\usepackage{environ}
\usepackage{luacode}
\begin{luacode*}
xml = xml or {}
lxml = lxml or {}
moduledata = moduledata or {}
statistics = statistics or { register = function() end }
require("x-asciimath")

function asciimath(str)
    local texmath = moduledata.asciimath.convert(str)
    assert(texmath) -- sledgehammer error handling
    tex.sprint(texmath)
end
\end{luacode*}

% Some aliases from ConTeXt
\let\lparent(
\let\rparent)

\protected\def\doasciimath#1{%
    %\enableautofences % No straightforward LaTeX equivalent
    \mathdelimitersmode="16 % Some magic number from ConTeXt
    \directlua{asciimath("\luaescapestring{\detokenize\expandafter{\expanded{#1}}}")}%
}

\NewEnviron{asciimath}{%
    \begin{math}%
        \doasciimath{\BODY}%
    \end{math}%
}

\NewEnviron{asciidisplaymath}{%
    \begin{displaymath}%
        \doasciimath{\BODY}%
    \end{displaymath}%
}

\begin{document}

\begin{asciimath}
    a/b * alpha/omega * f(x)/g(x) * (x+1)/(a*(b+c))
\end{asciimath}

\begin{asciidisplaymath}
    a/b * alpha/omega * f(x)/g(x) * (x+1)/(a*(b+c))
\end{asciidisplaymath}

\end{document}

相关内容