如何才能自動識別化學式並將部分數字改為下標?

網上有很多word文檔的化學式的下標格式都沒有,例如水就直接顯示為H2O,沒有顯示下標,如果一篇文檔全部沒有下標的話有沒有什麼方法可以自動識別化學式並將數字改為下標呢?並且要能區分化學方程式中化學式的係數,比如2H2+O2=2H2O,這幾個2需要區分。 現在我有一個思路,就是一般來說字母后面的數字都應該為下標,所以有沒有什麼方法(替換?)能自動實現這點呢? 謝謝大家!
--------------------------
這裡再給大家添一張圖片,發現實際情況還是挺複雜的,其中還包括陰陽離子符號(+ -)

----------------------------------------------------------------
謝謝大家的回答,特別是用VBA的大神,非常感謝~
我當時也研究了一下,用的是二次查找的方法,目前只能改下標,離子符號什麼的太複雜了,有待研究。具體方法在下面的回答中.


下面我通過使用二次查找來實現.
首先打開查找窗口,查找內容是 ^$^# ,代表的意思是搜索所有的 字母+數字 ,這些都不需要我們背,最下方的 特殊格式 按鈕 里都列出來了。

然後查找範圍是 整個文檔(主文檔)
接下來所有的 字母+數字 的都被選中了。這時不要關閉窗口,繼續第二次查找。這時的查找內容是所有數字(^#),查找範圍則是當前選中的內容。

這時所有需要我們替換成下標的數字都被選中了。再切到替換窗口,將所有選中的數字替換成下標。方法如下圖所示。

點擊確定,搞定。

當然,結果還不完美,有些括弧後面的數字也是下標,比如Ca(OH)2,這時再用二次查找的方法替換就行了。大家掌握好這個方法就行了。


謝 @宋一喵 提醒,我只考慮了±1價的離子,確實是欠考慮。代碼什麼的我就不改了吧,大家領會意思就好了,(╯‵□′)╯︵┻━┻

謝邀。

VBA 來搞定這貨。

因為用 VBA 分析哪些是化學式哪些是正文,確實有點困難。所以採用另外的方法,就是用戶用滑鼠選中化學方程式,然後點擊一個按鈕,然後上下標就完成了。算是半自動吧。

創建一個名為 Chemical 的宏。

點擊創建後,會打開一個代碼框,裡面有 Word 自動生成的一段代碼,刪掉它,然後把下面的代碼粘貼進去。

Sub Chemical()
Dim Str As String
" 分子式的起始位置
Dim Index As Integer
" 分子式的長度,我用 Str.Length 報錯,只能曲線救國了……我對 VBA 也不是太熟
Dim Length As Integer
" 遍歷選中文本
For Each c In Selection.Characters
Select Case c
Case " "
" 如果遇到空格
If Str &<&> "+" And Str &<&> "→" Then
" 而且不是連接符 + 或者 →
" 調用函數 ChangeFont,改變這一個分子式的上下標
ChangeFont Index:=Index - Length, Length:=Length
End If
" 改完後清空 Str
Str = ""
Length = 0
Case Else
" 如果是其他字元,就認為是分子式,添加到分子式末尾
Str = Str c
Length = Length + 1
End Select
Index = Index + 1
Next c
" 調用函數 ChangeFont,改變這最後一個分子式的上下標
ChangeFont Index:=Index - Length, Length:=Length
End Sub

Sub ChangeFont(ByVal Index As Integer, ByVal Length As Integer)
" 係數模式標記
Dim CoefficientMode As Boolean
" 默認是 True
CoefficientMode = True

" 我用 For i = Index to Index + Lenght - 1 和 Selection.Characters(i) 報錯,所以只好這樣了。
Dim i As Integer
For Each c In Selection.Characters
" 遍歷選中文本
If i &>= Index And i &<= Index + Length - 1 Then " 如果在該分子式範圍內 If c &>= "0" And c &<= "9" Then Else " 且不是數字,則退出係數模式 CoefficientMode = False End If " 係數模式外的數字均為上下標 If Not CoefficientMode Then " 數字設置成下標 If c &>= "0" And c &<= "9" Then c.Font.Subscript = True End If " +- 設置成上標 If c = "+" Or c = "-" Then c.Font.Superscript = True End If End If End If i = i + 1 Next c End Sub

就像這樣

為了便於使用,我們把這個 Chemical 宏添加到快速訪問工具欄中。

改個圖標和名字

然後這貨就跑到這裡了。

用法很簡單,我們敲好化學式。

選中第一個化學式,然後點擊那個添加的按鈕,然後上下標就好了。

選中第二個,重複剛剛的過程。

最後補充一點:因為 + 號有可能是離子符號,也可能是加號,所以為了區分,我這裡偷懶了。我認為緊跟著分子式的加號是離子符號。所以要求分子式中加號要與分子式之間有一個空格,離子符號不允許有空格。抽取分子式也是判斷空格的,這也要求分子式和 + 和 → 之間有一個空格。代碼有點丑,見諒。


ChemDraw


顯然Word不是用來編輯化學(方程)式的最佳人選


你可以看看這個:不用其他軟體在Word中輸入化學方程式


樓上有用VBA實現的,很棒。如果你不會VBA,可以試試我的方法。

1° 自動更正列表
首先手工輸入你要的化學式,比如H2O,設置好上下標。
然後選中,添加到自動更正列表中,
注意,選擇紅框中的帶格式文本
下次輸入的時候,只需要鍵入H2O,然後空格,格式就自動改過來了。
這需要積累,積累一個龐大的自動更正列表庫,並且注意備份。
如果你是中學老師,其實常見的化學式也沒有多少,慢慢的就都有了。遇到一個添加一個就是了。

2° 藉助化學工具箱小軟體
這本來是一個配平工具,但它能自動修改格式
把配平後的方程式直接複製到Word中,縮小一下字型大小就可以了。
值得注意的是,這樣做得到的下標並不是真正的下標,
只是數字的字型大小比元素符號的字型大小小一些而已。
軟體由Jumping設計,很感謝他,雖然我不知道他是誰。

3° 藉助chemdraw

這個不多說了,並不好用,
chemdraw中的clean up reaction 對付有機合成路線,無機化學方程式不太好用
不需要輸入加號,輸入化學式、繪製箭頭,然後clean up reaction,
然後用工具欄上的CH2調整上下標,最後複製到Word中。


化學金排 這個軟體能滿足你的要求,但是不知道支不支持最新版word
http://m.onlinedown.net/app.php?os=1id=1459


Latex大法好,退word保平安
usepackage[version=3]{mhchem}


我自己是做水處理的,我經常會需要在word裡面輸入化學式(投加的水處理藥劑、有機的、無機的等等),很麻煩。所以我自己開發了一個word插件,能夠自動識別需要上下標的地方,然後一鍵批量上下標。叫文字效果自動糾正。Text-effect-autocorrection by he-yang
這個插件是基於js開發的,你就不用再用vba了,這個插件是直接載入了就能用。準確性極高,因為是基於內建的化學式的庫的。


word有一個化學公式的插件。不過我就喜歡拿cad畫。


推薦閱讀:

你發表第一篇英文 SCI 論文經歷了怎樣的過程?
邏輯四大基本規律在刑事偵查活動中有哪些運用?
論文的格式要求是怎樣的?
2017 年,哪些金融學論文讓你印象深刻?

TAG:編程 | MicrosoftOffice | 化學 | MicrosoftWord | 論文 |