在网页中显示WORD域(eq)代码公式的思路

1 篇文章 0 订阅
1 篇文章 0 订阅

一、什么是EQ域?EQ域百科解释

嗯,大概清楚了。它是用来编写公式用的东东。那该怎么怎么使用呢?

二、EQ域的基本使用

基本格式是{ eq switch}eq为域的限定符,switch代表开关,如:分数开关 \f(分子,分母)。实例{ eq \f(3,4)} 渲染出来的是 3 4 \frac{3}{4} 43。注意:在WORD中直接输入该格式的文本是不起作用的,需要使用ctrl + f9快捷键插入一个域,此时会自动添加出一对花括号{},然后再输入eq限定符及相应的开关即可。

三、EQ域开关switch

明白了EQ域如何用后,接下来了解开关的编写及都有哪些关种类。上面已经介绍过了一个分数开关\f(3,4)基本结构就是 \开关字符[\参数1\参数2..](表达式)
EQ域开关主要有以下几种:

  • 数组开关\a [参数...] (表达式1[,表达式2[,...]])参数值如下:
    • \al 左对齐
    • \ac 居中对齐
    • \ar 右对齐
    • \co{n} 将表达式中的元素排n列,如: \co6
    • \vs{n} 设置行间距为n磅,如:\vs6
    • \hs{n} 设置列间距为n磅,如:\hs6
  • 括号开关 \b [参数...] (表达式),参数值如下:
    • \lc{c} 设置左边括号为字符c,如: \lc\{
    • \rc{c} 设置右边括号为字符c,如:\rc\}
    • \bc{c} 设置左右括号为字符c,如:\bc\|
  • 位移开关 \d [参数...] (表达式),参数值如下:
    • \fo{n} 下一个字符向右移动n磅
    • \ba{n} 下一个字符向左移动n磅
    • \li 为下一个字符前的空白添加下划线
  • 分数开关 \f(分子表达式, 分母表达式)
  • 积分开关 \i [参数...] (表达式1,表达式2,表达式3),参数值如下:
    • \pr 积分号改为求积
    • \in 积分限不写到上下,而是改为右边
    • \fc{n} 积分号改为固定大小的符号n
    • \vc{n} 积分号改为可变大小的符号n,可随着积分表达式大小变化
  • 列表开关 \l(表达式)
  • 重叠开关 \o(表达式)
  • 根号开关 \r(,)
  • 上下标开关 \s()
    • \ain() 在段落上面添加n磅的空白
    • \din() 在段落下面添加n磅的空白
    • \upn() 将给定的字符向上平移n磅
    • \don() 将给定的字符向下平移n磅
  • 方框开关 \x()
    • \ri 在右边添加边框
    • \to 在上边添加边框
    • \bo 在下边添加边框

四、思考

如果想把eq域公式在web中显示,我们该怎么做???网页中是怎样显示数学公式的???

MathML
数学标记语言,是一种基于XML(标准通用标记语言的子集)的标准,用来在互联网上书写数学符号和公式的置标语言。

对,就是它。先来看一下,上面我们提到的 3 4 \frac{3}{4} 43 ,用MathML来编写,结构如下:

<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
  <mfrac>
    <mn>3</mn>
    <mn>4</mn>
  </mfrac>
</math>

这个是可以直接在网页显示的,但是直接放到浏览器中运行会发现,样式不太对。so,MathJax前端插件就出现了,我们用它来渲染显示,立马就不一样。当你在页面右键一个公式:

有个TeX Commands 菜单,点击后:

嗯,这才是我们的主菜!!!\frac{3}{4}与EQ域代码\f(3,4)对比一下是不是十分相像?突破点就在这里。我们只要把EQ代码里的f => frac; ( => {; , => }{; ) => }这样一替换不就实现转换过来了吗?然后用MathJax进行渲染就可以了。

思路就是将EQ域的公式代码转换成Latex格式代码,即可实现在网页中显示。用C#写的部分思路代码如下:

static string ConvertEqToLatex(string strEqution)
{
    Regex reg = new Regex(@"((?<cmd>\\f|\\r)\((?<con>(?:[^()])+?)\))+?");
    MatchCollection mc = reg.Matches(strEqution);
    if (mc.Count <= 0)
    {
        return strEqution;
    }

    foreach(Match m in mc)
    {
        string strReplace = "";
        if (m.Groups["cmd"].Value.Contains("\\f"))
        {
            strReplace = m.Groups["con"].Value.Replace(@",", "}{");
            strReplace = @"\frac{" + strReplace + "}";
        }
        else if (m.Groups["cmd"].Value.Contains("\\r"))
        {
            strReplace = @"\sqrt{" + m.Groups["con"].Value + "}";
        }
        else //if(...)
        {
			// todo: 完善其它开关的转化...
		}
        strEqution = strEqution.Replace(m.Value, strdh);
    }

    return ConvertEqToLatex(strEqution);
}

五、总结

记录一下最近项目遇到的情景,需要对WORD文档进行解析处理。文字图片什么的都好说,公式的处理确实挺麻烦的,需要花点时间专研。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值