intellij idea汉化 UEditor WebStorm matlotlib 父子元素 firebase yii erp系统源码 matlab中log函数 mysql自连接 flutter 缺点 python最大值 python对象 python的extend python环境变量配置 java基础教程 java连接mysql java8特性 java课程 java集合转数组 windows7loader 摩斯电码翻译器 ps校正倾斜照片 js格式化时间 华为一键root工具 视频加字幕软件 js分页 头条视频解析 文字图片制作 videoview 卸载mysql 组合索引 lol特效盒子 csshover 移动硬盘检测工具 lol华为工程模式 apk反编译工具 梦幻西游手游辅助 无限弹窗 系统激活软件
当前位置: 首页 > 学习教程  > 编程语言

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

2020/9/19 14:43:10 文章标签:

一、什么是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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这个是可以直接在网页显示的,但是直接放到浏览器中运行会发现,样式不太对。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文档进行解析处理。文字图片什么的都好说,公式的处理确实挺麻烦的,需要花点时间专研。


本文链接:
http://www.dtmao.cc/news_show_200157.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?