最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Word VBA:Mathtype公式與Latex公式切換

2022-07-15 02:30 作者:ch_j  | 我要投稿

一、準備

1.調(diào)用MathType庫

(1)點開發(fā)工具-工具-引用

開發(fā)工具-工具-引用

(2)勾選【MathTypeCommands】類

勾選MathType類-確定

2.內(nèi)部方法/命令

MathTypeCommands.MTCommand_TeXToggle

意思是在MathType格式和Latex格式之間,切換所選區(qū)域公式的格式

二、操作方法

因為是通過VBA代碼編寫我們既可以寫循環(huán)(對選區(qū)的每個公式單獨選中,切換),又可以一步完成(全選需要處理的所有公式,直接寫一條語句即可完成)。簡單對比一下:

1.假設(shè)需求

這里準備了兩內(nèi)容相同的文檔,都是34頁公式,我們對全文公式操作。

兩份相同的待處理文檔

2.處理速度對比

(1)循環(huán)方法

A.示例代碼

Rem 運行此代碼請先勾選上MathType庫
Sub mtEqToLatex()
 ? ?Dim fd As Field
 ? ?Dim fw As Range
 ? ?Dim i As Long
 ? ?
 ? ?t0 = Now
 ? ?Set fw = Selection.Range
 ? ?If fw.Start = fw.End Then Exit Sub
 ? ?Application.ScreenUpdating = False
 ? ?
 ? ?For Each fd In fw.Fields
 ? ? ? ?If fd.Code Like "*EMBED Equation.*" Then
 ? ? ? ? ? ?fd.Select
 ? ? ? ? ? ?MathTypeCommands.MTCommand_TeXToggle
 ? ? ? ? ? ?i = i + 1
 ? ? ? ?End If
 ? ?Next
 ? ?
 ? ?fw.Select
 ? ?Application.ScreenUpdating = True
 ? ?Set fw = Nothing
 ? ?Set fd = Nothing
 ? ?Debug.Print DateDiff("s", t0, Now)
 ? ?MsgBox Format(i, "完成 共處理了0個公式")
End Sub

B.測試結(jié)果

全選【文檔1】,運行上面的代碼

運行結(jié)果

在立即窗口看到,運行完成用了149秒,速度挺慢。

(2)直接運行

A.示例代碼

Rem 運行此代碼請先勾選上MathType庫
Sub mtEqToLatex_All()
 ? ?Dim fd As Field
 ? ?Dim fw As Range
 ? ?Dim i As Long
 ? ?
 ? ?t0 = Now
 ? ?Set fw = Selection.Range
 ? ?If fw.Start = fw.End Then Exit Sub
 ? ?Application.ScreenUpdating = False
 ? ?
 ? ?For Each fd In fw.Fields
 ? ? ? ?If fd.Code Like "*EMBED Equation.*" Then
 ? ? ? ? ? ?i = i + 1
 ? ? ? ?End If
 ? ?Next
 ? ?
 ? ?MathTypeCommands.MTCommand_TeXToggle

 ? ?fw.Select
 ? ?Application.ScreenUpdating = True
 ? ?Set fw = Nothing
 ? ?Set fd = Nothing
 ? ?Debug.Print DateDiff("s", t0, Now)
 ? ?MsgBox Format(i, "完成 共處理了0個公式")
End Sub

B.測試結(jié)果

全選【文檔2】,運行上面的代碼

運行結(jié)果

在立即窗口看到,運行完成用了???秒。

大概運行了4-5分鐘,屏幕還在一直抖動,因為運行太慢,就手動停止了。(此時還只運行到第5頁)

這種方法運行更慢,不可取。

3.分析

最初還以為全選一次運行可以更快,因為我認為MathType插件里面應(yīng)該優(yōu)化了方法,本來就是循環(huán)。但是最終的結(jié)果并不是。

所以說有時候代碼操作和手動操作的區(qū)域還是很大的。

三、完整思路與代碼

1.思路

(1)選擇區(qū)域,防止誤操作

(2)遍歷區(qū)域內(nèi)的域,因為MathType公式的域代碼必定包含【EMBED Equation.】,用like方法比較判斷是否為MathType公式

:此處可以用MathType內(nèi)部方法逐個選中公式,有興趣可先自行研究,后面可能會專門講

(3)如果是MathType公式,則選中這個域(公式)所在區(qū)域,執(zhí)切換命令,然后計數(shù)

(4)循環(huán)完成,操作結(jié)束

2.最終推薦代碼

Rem 運行此代碼請先勾選上MathType庫
Sub mtEqToLatex()
 ? ?Dim fd As Field
 ? ?Dim fw As Range
 ? ?Dim i As Long
 ? ?
 ? ?t0 = Now
 ? ?Set fw = Selection.Range
 ? ?If fw.Start = fw.End Then Exit Sub
 ? ?Application.ScreenUpdating = False
 ? ?
 ? ?For Each fd In fw.Fields
 ? ? ? ?If fd.Code Like "*EMBED Equation.*" Then
 ? ? ? ? ? ?fd.Select
 ? ? ? ? ? ?MathTypeCommands.MTCommand_TeXToggle
 ? ? ? ? ? ?i = i + 1
 ? ? ? ?End If
 ? ?Next
 ? ?
 ? ?fw.Select
 ? ?Application.ScreenUpdating = True
 ? ?Set fw = Nothing
 ? ?Set fd = Nothing
 ? ?Debug.Print DateDiff("s", t0, Now)
 ? ?MsgBox Format(i, "完成 共處理了0個公式")
End Sub


Word VBA:Mathtype公式與Latex公式切換的評論 (共 條)

分享到微博請遵守國家法律
临夏县| 庆阳市| 崇信县| 太原市| 东阿县| 宜川县| 阿克| 塘沽区| 龙南县| 扎鲁特旗| 庆云县| 昌邑市| 卓尼县| 湖州市| 镇巴县| 余姚市| 兖州市| 厦门市| 遂溪县| 治县。| 溧阳市| 新田县| 班戈县| 扶沟县| 萝北县| 武安市| 和硕县| 河间市| 宝兴县| 太和县| 湘西| 罗山县| 清苑县| 建水县| 章丘市| 运城市| 潮州市| 砀山县| 鹰潭市| 海原县| 友谊县|