Mar 1, 2014

使用Scientific Workplace 5.0 + XeLatex軟體做中英文混雜並夾帶數學公式的長篇圖文文章電腦排版

  這邊介紹如何利用Scientific Workplace 5.0的編輯方便性,加上XeLatex (TeX life 2013)對中英文混雜的完美支援,來對中英文混雜並夾帶數學公式的長篇圖文文章做自動排版。



Scientific Workplace 5.0 (SWP)可以處理中文文件,不過他對中英夾雜的文件支援不夠好,在排版過程中你會遇到許多overfull hbox的不恰當斷行排版 (一行中英混雜的行會超出頁面),這似乎是因為SWP的排版引擎(Omega)對中英混雜的排版規則還不夠好,因此若要更美觀的排出中英夾雜文章,可以用Latex中強大的xeCJK套件,這裡我是用TEX Live 2013免費共享軟體,他裡面有不少排版引擎,其中可以編譯xeCJK的引擎是xeLatex。我這邊詳述如何正常以SWP來編輯文件,最後再以TeX Live 2013做排版compile的動作,這樣排出的文章就不會有overfull hbox的問題。

SWP具有很好用的Latex編輯軟體,大大的節省latex編輯的時間。尤其是數學符號公式。不過很可惜他的說明文件做的不好,想要學習他的人得要有點耐心。

不過SWP軟體產生的tex檔無法直接給Xelatex執行,因為SWP有些語法是他特有的,也因此有一些需要調整的地方,這邊介紹我是如何調整SWP生成的tex檔,來讓Xelatex使用而產生這篇文章。當然,這並不是說我介紹的調整都適用所有的狀況,不過我想這幾個調整都是基本且一定會遇到的,因此我把它寫下來。
  • 若文件裡有中文,SWP 5.0產生的tex文件裡面,其中文編碼是有一個特別的unicode型式,比如說,若你用notepad打開tex文件去讀裡面的內容,你會發現,比如說"我"這個字,他會顯示成\U{6211},這是因為SWP加了兩個括號{},以致文字轉譯出現問題。因此我用Python程式寫了個小程式來移除所有的{},這樣其他的軟體就可以正常顯示SWP產生的內含中文的tex文件。
程式很簡單:

import re
import codecs
def dashrepl(matchobj):
    return chr(int(matchobj.group(1),16))
f1 = open('rotationV4pngtest.tex', 'r')   # name of your origianl file
f2 = codecs.open('rotationV4pngtest.tex.temp', "w", "utf-8")   #  name of the new file
p= re.compile(r"\\U{([\w]{,4})}")
for line in f1:
    m = re.sub(p,dashrepl,line)
##    print(m)
    f2.write(m)
f1.close()
f2.close()

  • 若要讓SWP的tex檔讓其他編譯軟體執行,你必須改變檔案開頭的一些設定行,因為套件使用上及語法上的使用有些許不同,這邊我提供我的case,不過依個人的設定不同,可能還需要稍微自行修改。我是使用Tex Live 2013裡的Xelatex編譯器,所以我的修改是以Xelatex可執行為目標。
以上面我提供個那個鏈結裡的文章為例,原本SWP生成的tex文件開頭的設定(正式名稱叫preamble)為:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{sw2unicode}
\usepackage[UT1]{fontenc}
\usepackage{pmingliu}
\usepackage[left=0.95in,right=0.95in,top=2cm,bottom=2.54cm]{geometry}
把以上改為以下定義,
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{xeCJK}
\setmainfont[Mapping=tex-text]{Times New Roman} % rm
\setsansfont[Mapping=tex-text]{Arial}           % sf
\setmonofont{Courier New}                       % tt
\setCJKmainfont{微軟正黑體}
\usepackage[left=0.95in,right=0.95in,top=2cm,bottom=2.54cm]{geometry}
\usepackage{unicode-math}
\usepackage{graphicx}
\usepackage[hidelinks]{hyperref}

  • 接著由於SWP生成的檔案裡有些符號有用到tcilatex.tex這個macro,所以必須copy這個檔案到你個tex文件的資料夾中,tcilatex.tex這個檔在SWP的安裝路徑的位置如下D:\swp50\TCITeX\TeX\LaTeX\SWmacros\,找到這個檔案並且複製到你的工作資料夾,並且保留你的SWP生成的tex文件中的\input{tcilatex.tex}此行,這樣就能讓文件被Xelatex順利執行。
  • 接著若你有圖片,也必須修改加入圖片的指令行,因為SWP使用的語法與Xelatex有不同。以上都可以剪下貼上,這邊就要比較手動處理了。


Xelatex接受的圖片安插指令為:
\begin{figure}[th]
\caption{{}}
\label{firstfig}
\begin{center}
\fbox{\includegraphics[scale=0.7]{cordtrans.JPG}}
\end{center}
\end{figure}

因此在任何的文件編輯器中(如Notepad)打開tex檔,把所有有以下結構的指令,改成以上的形式,

\FRAME{fhF}{5.5097in}{3.7135in}{0pt}{}{}{cordtrans.JPG}{\special{language
"Scientific Word";type "GRAPHIC";maintain-aspect-ratio TRUE;display
"USEDEF";valid_file "F";width 5.5097in;height 3.7135in;depth
0pt;original-width 9.135in;original-height 6.1436in;cropleft "0";croptop
"1";cropright "1";cropbottom "0";filename
'
cordtrans.JPG';file-properties "XNPEU";}}

這樣應該就可以了!!

這裡也附上原始SWP生成的檔案,以及用以上三點修改過後xelatex可執行的完成檔

2015/10/01
因為後來用SWP編輯然後用xelatex編譯實在是太常用到了,一步一步改不夠快,我把所有的指令打包成一個bat檔,這樣只要按一下bat檔,就會把SWP編輯的檔案自動做以上描述的動作並且自動執行xelatex編譯。基本上是一鍵到底的概念,只要專注在SWP中的編輯,編完後按一下bat就完成所有其他的動作。基本上是有點朝使用者介面及按鍵化的概念。
bat檔如下

cd C:\Documents and Settings\2014\xelatexfolder
python.exe ureplace_plus_preamble_adjust.py %*
pause
xelatex --shell-escape rotationV14upa.tex
pause

其中ureplace_plus_preamble_adjust.py檔案如下



相關文章:
用python繪製3d向量圖形
http://whymranderson.blogspot.tw/2014/07/use-python-matplotlib-to-create-vector.html

No comments: