從心裡說,我不喜歡 Word;我喜歡 Latex。然而現實就是這樣,明明有感情卻不能在一起,沒感情的綁得牢牢的 ……
由於寫文章的需要,需要在文檔裡插入C/C++代碼。我並不需要關鍵字高亮,因為印刷是灰階的,彩色的字效果反而不好。所以高亮對我沒有意義。如果有朋友需要高亮,可以使用Notepad++,把代碼複製進去,然後再用“帶文法高亮複製”的辦法,貼到word裡去。
這條路對我來說行不通,我只需要排出來的代碼能對齊就好了。選擇字元等寬的字型(Courier New),得到如下的結果:
看到了嗎?
Word 裡怎麼調整都是對不齊的……去掉Word字元間距調整,還是這個樣子,實在是無語。怎麼個鬱悶了得!
痛定思痛,怎麼把這個問題解決呢?仔細觀察文檔,Word無法調整Courier New 字元間距,它調整的是空格的間距,我就想了,能不能在Courier New 字元裡找個預留位置,替代Word裡的空格呢?呵呵,還真就找到了……
用這個替代空格以後,真的就對齊了。
這裡有來了個問題,代碼裡要用這個看不見的小圓圈替代空格,工作量可不小!怎麼辦?我想到了用尋找替換,實驗了一下不行。後來一想,用宏寫個小代碼不就解決問題了嗎?
Sub replace_space()<br />'<br />' replace_space Macro<br />' 宏在 2011/5/11 由 雪松 錄製<br />'<br />Dim outLoop As Boolean<br />Dim i As Integer<br />Dim start As Integer<br />Dim curpos As Integer<br />start = 0<br />curpos = 0<br />i = 0<br />Selection.Find.ClearFormatting<br />Do<br /> With Selection.Find<br /> .Text = " "<br /> .Replacement.Text = "F"<br /> .Forward = True<br /> .Wrap = wdFindContinue<br /> .Format = False<br /> .MatchCase = False<br /> .MatchWholeWord = False<br /> .MatchByte = True<br /> .MatchWildcards = False<br /> .MatchSoundsLike = False<br /> .MatchAllWordForms = False<br /> End With<br /> outLoop = Selection.Find.Execute<br /> If (outLoop = True) Then<br /> curpos = Selection.start<br /> If (i = 0) Then<br /> start = curpos<br /> End If<br /> Selection.InsertSymbol Font:="Courier New", CharacterNumber:=160, Unicode _<br /> :=True<br /> i = i + 1<br /> End If<br /> Loop While ((outLoop = True) And (((start <> curpos) And (i <> 1)) Or ((i = 1) And (start = curpos))))</p><p>End Sub
建立一個Word檔案,把代碼複製進去,執行該宏,所有空格都會被替代成小圓圈,然後再拷貝出來,貼到自己想要的地方……恩,算是解決了這個頭疼的問題了……