LaTeX macro package for MS Word and PowerPoint
科學文章少不了數式, 用甚麼來排好呢?
latex, 科學界de facto的排版軟件, 排數學公式最擅長. 做出來的檔案比MS word輕巧十倍, 也穩定得多.
不過, 平日工作, 出於種種現實問題, 不容你不用MS word. 用word那「所見即所得」的eq editor來做公式相當麻煩, 而且公式一多, 檔案就不穩定, 很易hang機.
word與ppt無可否認有其好處. ppt不消說. 用word做簡單的短文章也的確方便. 何況latex檔的源碼不是人人懂看, 輸出成pdf傳給別人, 人家又不能改動.
遷就現實的折衷方案, 是把latex數式插入word/ppt裡. 如果能利用latex的pstricks套件直接在檔案內plot圖就更無敵, 一個file搞掂.
* * *
不可多得的套件: IguanaTex 與 TeXsword
(下文就office 2003而論. 其後發展, 見文末補注.)
1.
IguanaTex: Free LaTeX Add-In for PowerPoint
這是個寶!
自從TeXPoint改為收錢後, 終於有人再寫出一個功能相當、open source的免費軟體. 功德無量!
裝上IguanaTex, 就可以在ppt內輸入latex公式. 公式以png圖顯示, 浮貼在ppt檔案上. double click該圖又會變回latex code. 檔案如果拿到沒裝此軟件的機上打開, 實驗的結果, 檔案仍能正常顯示. (公式的png此時當然不能變為latex碼), 把公式的圖拉大縮小後拿回裝了iguanatex的機上打開, 又可以照常變換成latex碼.
在ppt內加入latex公式的軟件, 老大哥不得不數TexPoint. texpoint原本是open source且免費的, "可惜" textpoint的作者不滿大家只懂開口提議改這改那, 又不動手寫code來貢獻貢獻, 結果在好幾年前決定改為收費.
傳統上, 在powerpoint內加入latex公式的流行軟件有二, 除了texpoint, 還有tex4ppt.
TeX4PPT暫時還不行, 雖然用native TTF砌出公式的想法很有意思.
tex4ppt的問題: (1) 會在system裡加進一大堆字體, 搗亂了原來font list. (2) 它逐個符號砌出公式來, 每個符號自己都是一個textbox. 結果大大增加了CPU的負荷, 檔案處理變慢, 也不穩定----電腦效態日益提升, 可能問題很快變得不要緊.
native這條路, 長遠發展應是把tex公式的內碼, 轉成以window內建的eq格式. 那就終極了.
(Mac上據說有
LaTeXiT可資一用)
2.
TeXsword: LaTeX macro package for Microsoft Word
在ppt裡加入latex的軟件(其實是macro), 早在十年多前ms office 97時代, 已經有了首屈一指的texpoint. 可是用在word上加latex數式的軟件, 卻一直沒有人寫, 大概是因為latex的高手都不屑用word. ppt是實在沒有更好的替代品(至少在當時), 所以才肯屈就.
經過這許多年, 終於有人把這想法在word上實現了! (我的VB不行, 沒功力做出來)
TeXsword與iguanatex的功能相當, 只是用在word上. 論功能, 考慮比iguanatex周到, 不過, 對latex output轉圖的處理, iguanatex更乾脆利落, 不需經dos prompt, 也不需另裝ghostscript:
(a) iguanatex直接用vb的execute指令執行latex,
texsword則先把command寫進dos batch file才一次過執行.
(b) 發生了問題, iguanatex會自動顯示log file
(c) iguanatex 用dvipng來轉圖, 不用產生ps檔.
(d) iguanatex 有installer, 把ppa直截放進startup內. 不用人手做.
PS:
發現另一工具, LaTeXinWord, 不必安裝miktex和ghostscript, 但需上網, 因為它用網上的latex engine. 偷懶的話, 更方便.
2010.10.29 PS:
* 用
codecogs打公式, copy and paste. 不失為一方便之選擇. codecogs是我見過的最快捷的online latex equation editor之一. 可以一邊打符號, 一邊即時看結果. 可惜無法連alt text一起copy, 因此paste後不能修訂. 要改正須重新再打.
* 新工具
TeXPPT適用於2007以後. 疑為tex4ppt的新版. 未曾試過.
2010.11.10 PS:
* office 2007/2010 已有內置latex輸入法.
* texsword 現已改用dvipng. 只需安裝miktex, 不必ghostscript了. 且加入了recompile all功能, 可把文章內所有latex公式, 一次過全部重新編譯.
2011.02.10 PS:
* 不曉得某符號的 latex code, 可用
detexify 查出來. 此工具能辨認以滑鼠手寫的筆劃, 顯示對應符號的 latex 碼.
* 可在公式中加入中文如下. 例中, 用CJK*則中文之間及中文後的空格將略去. 用CJK則保留. (相關package頗大, 使用前最好先直接在miktex :: maintance :: package manager 安裝CJK相關項目.)
\documentclass{article}
\usepackage{CJK}
\pagestyle{empty}
\begin{document}
\begin{CJK*}{Bg5}{bsmi}
\[
E_\text{粒子 particle} = mc^2,
\quad \text{其中 $m$ 是
質量,$c$ 是 speed of light 即光速。}
\]
\end{CJK*}
\end{document}
以上只是權宜之計, 「許功蓋」等字的問題, 不改動VBA程式碼, 無法處理. (see below 2012.05.17)
* 用texsword做出來的pdf, 在screen上看來, 公式像發腫了 (但列印品並沒問題). 問題出於一般pdf driver處理透明png不理想. 暫時沒有簡單的解決方法, 只有改動VB程式碼, 指定輸出的png為不透明一途. 方法如下:
(複製texsword.dot, 改名為whitexsword.dot. 在新file上做改動, 以策安全)
1. 按右鍵打開whitexsword.dot.
2. 按alt-F11打開VB editor. 打開project(whitexsword.dot) :: modulas :: texsword_runlatex
3. 按ctrl-f搜尋transparent. 應見到以下語句:
DviPngSwitches = DviPngSwitches & " -bg Transparent"
4. 把Transparent改成white, 如下:
DviPngSwitches = DviPngSwitches & " -bg white"
5. 完成. 儲存後, 使用 whitexsword.dot 即可.
2011.06.29 PS:
要做 graph paper, 可用 graphpap 或 logpap package, 十分方便.
\usepackage{graphpap,xcolor}
\setlength\unitlength{0.5mm}
{ \color{cyan} \graphpaper[2](0,0)(100,50) }
\usepackage{logpap}
\LPSet{notext,nodimensions}
\linlinpap(50mm,10mm)(5,1){0}{0}[X][Y]
注意, \LPSet{}中各選項之間, 逗號後 *不可* 留空格.
2012.05.17 PS:
要解決許功蓋問題, 須改用utf8 (no BOM) 來儲存臨時檔, 這涉及改動VB程式碼, 方法如下:
(複製texsword.dot, 改名為texsword_utf8.dot. 在新file上做改動, 以策安全)
1. 按右鍵打開texsword_utf8.dot.
2. 按alt-F11打開VB editor. 打開project(texsword_utf8.dot) :: modulas :: texsword_util
3. 按ctrl-f搜尋DumpStringToTextFile. 應見到以下語句:
Open FileName For Output As #111
Print #111, mystring
Close #111
4. Comment out 以上三句. 加入以下語句:
Dim data, writer As Object
Set data = CreateObject("ADODB.Stream")
Set writer = CreateObject("Adodb.Stream")
data.Type = 2
data.Charset = "utf-8"
data.Open
data.writetext mystring
' Write data to writer, except the BOM, as binary
writer.Type = 1
writer.Mode = 3
writer.Open
data.Position = 3
data.CopyTo writer, -1
writer.SaveToFile FileName, 2
Set writer = Nothing
Set data = Nothing
5. 完成. 儲存後, 使用 texsword_utf8.dot.
6. 改用\begin{CJK*}{UTF8}{bsmi}即可. (see above 2011.02.10)
* * *
PsTricks: (待考察)
The PracTeX JournalFree Graphics Software for the TeX, LaTeX, and PSTricks CommunityMathematical illustrationsPSTricks User's GuideTpx