孫祥輝 楊 雨 孫道強
(平頂山學院計算機學院 河南 平頂山 467000)
撰寫畢業論文是高校學生完成學業的重要環節,我國高校畢業論文有規定的格式及要求,雖然使用一般的編輯排版軟件也能夠完成,但是都相當麻煩、耗時。如使用文檔編輯排版軟件WORD或WPS撰寫畢業論文總是花費師生大量寶貴時間去調整文章的格式,十分不方便,并且耗費精力。因此,研究并設計一套適用、便捷的高校畢業論文編輯和自動排版系統具有重要的現實意義。
目前,關于在線文檔的編排,國內外有了一些相關的研究及產品,比如谷歌的在線文檔編輯平臺Google Docs、Overleaf的在線LaTeX論文共享編輯平臺、百度文檔、騰訊文檔、釘釘文檔,上述相關平臺要么對中文論文的支持不太友好,要么不太滿足高校畢業生的畢業論文撰寫格式需求。Bahls等[1]研究了LaTeX軟件對科學、技術、工程和數學方向本科生論文寫作過程的影響。Gong等[2]研究了利用VBA采用OLE自動化技術進行格式調整的探索。魏子然[3]研究Tex環境排版系統下的多語言文檔排版的開發。Déjean等[4]研究了面向PDF的內容和格式抽取的工作。王福貴等[5]研究并搭建了基于ASP.NET的在線LaTeX編譯環境,為在線題庫和數學公式系統的開發提供了思路,但該系統不支持畢業論文的編輯和排版。張釕[6]研究了PapersCloud平臺的設計和搭建并提供了三種編輯科研論文的方式,為科研人員在線編排論文提供了方便,但該平臺在高校畢業論文的課題申報、選題管理、過程管理、答辯、推優等管理對接方面比較欠缺。黃嵐[7]結合自己多年從事編輯工作的經驗,探討了在科技論文排版中使用可視化LaTeX編輯器LyX模板的體會。此外,國內不少“雙一流”高校基本都有自己的LaTeX畢業論文模板,但是基本上都是本地版本,需要學生在本地安裝Tex編譯軟件,且要求學生掌握很多LaTeX命令才可以使用,無形之中又增加了學生的負擔,進而限制了很多文科專業學生的推廣和使用,因此亟待設計并開發一款可定制化、方便易用的基于LaTeX的高校畢業論文在線自動編排系統。
LaTeX是由Leslie Lamport開發的Tex擴展命令集合,可以使文章內容與排版格式分離,由于LaTeX在數學公式顯示、論文結構排版方面的出色效果,已成為國際學術論文發表的主流文稿準備格式[8-13]。眾多期刊都提供專用的排版和參考文獻類包文件供投稿者下載并快速格式化手稿為擬投稿標準格式,然而,目前大多數期刊都沒提供在線編排功能,LaTeX編排工作基本都是在本地完成然后上傳到投稿系統。此外,LaTeX需要使用者在計算機編程方面有一些基礎,且其在所見即所得方面還比較欠缺,這樣在一定程度上限制了基于LaTeX的排版系統的推廣和使用。為此,本文采用B/S架構與MVC設計模式開發一套基于LaTeX的高校論文在線自動編排系統(簡稱細思(Thesis)論文在線編排系統),輔助師生在掌握少量LaTeX知識甚至零基礎的情況下使用該系統輕松完成畢業論文的編輯排版工作,將主要注意力投入到論文內容質量提升上去,撰寫出更高質量的畢業論文。
項目運行環境采用Tex的發行版MikTex,在Windows系統下使用命令XeLaTeX和BibTex編譯Tex源文件及參考文獻生成PDF文件。使用安全性和穩定性都比較好的Java語言作為開發語言,同時使用輕便的開源數據庫MySQL進行數據存儲和管理,用Chrome瀏覽器或360瀏覽器極速模式進行生成PDF文件的在線預覽。整個開發平臺采用開源軟件Eclipse進行搭建與實現。
(1) MikTex:Tex是由Donald Knuth創造的基于底層編程語言的電子排版系統,MikTex是目前常用的Tex編譯引擎,可以邊下邊編譯,在編譯過程中缺少哪個sty文件可實時下載,比較方便。
(2) Java:Sun公司推出的一種簡單、安全、穩定、跨平臺且開源編程語言,廣泛應用于企業級Web應用開發和移動應用開發。
(3) Eclipse IDE:一款著名的跨平臺開源集成開發環境軟件,通過插件可以擴展包括Java在內的主流編程語言的開發工作。
(4) BootStrap4:來自Twitter,包含了豐富的Web組件,利用這些組件,可以快速地搭建一個漂亮、功能完備的網站。
(5) Ajax:通過在后臺與服務器進行少量數據交換,Ajax可以使網頁實現異步更新。在不刷新整體頁面的情況下加載部分組件,進而實現本系統的交互。
(6) SSH:一種流行的Web應用程序開源框架,支持數據庫移植,穩定程度高同時后期維護時需求技術成本低。
(7) PDFObject.js:一款開源的嵌入PDF組件,實現PDF文件的簡單在線預覽功能。
(8) Apache Commons Exec:Java進程管理工具,調用外部進程實現編譯功能,也是本系統中調用LaTeX軟件的關鍵技術。
細思(Thesis)論文在線編排系統后臺使用的是SSH架構搭建的服務器,前端是基于MVC的設計思想,采用MySQL數據庫存儲用戶論文信息。前端和后臺之間利用請求響應修改數據進而修改論文的Tex源文件,實現了數據的動態更新。使用JAVA語言開發Web項目,用戶無須搭建LaTeX運行環境即可實現在線編輯和排版論文,其編譯運行的流程如圖1所示。

圖1 系統流程
為了實現系統層次分明,減少耦合,系統總體劃分為三部分:文件管理模塊、LaTeX引擎宏封裝模塊、數據編輯模塊。
(1) 文件管理模塊:創建、修改論文的Tex源文件以及呈列生成的文件。在編譯論文的Tex源文件之前,該模塊獲取論文信息創建或者修改Tex源文件,待系統編譯完成后該模塊清除多余編譯文件,呈列出生成的論文文件以便下載。
(2) LaTeX引擎封裝宏包模塊:用于實現對LaTeX功能模塊的宏封裝,快速創建LaTeX的圖、表、引用等功能代碼,簡化LaTeX語言的使用。
(3) 數據編輯模塊:通過Web頁面實現對論文各個模塊信息的修改與添加,結合LaTeX排版系統格式與內容分離的特性實現模塊的修改不影響其他模塊的排版效果。
按照功能將系統的模塊進行劃分,如圖2所示。

圖2 系統功能模塊劃分
以論文的不同模塊劃分實體,所有實體通過user_id外鍵與當前用戶綁定,通過用戶id可將該用戶的一篇論文的所有模塊組合起來形成一篇完整的論文,表與表之間相互獨立且被唯一主鍵標識符合數據庫表設計第三范式,保證了數據的低冗余,消除了表之間的傳遞依賴,系統的E-R圖如圖3所示。

圖3 系統E-R圖
對應于系統的功能模塊劃分,數據庫共設計了9張表。每個表的詳細信息見表1。

表1 數據庫表信息

續表1
LaTeX排版的強大和關鍵之處在于LaTeX標簽語言命令,但是命令眾多不易記憶且論文章節的內容是復雜的、不確定的,涉及節、小節、圖片、表格、公式、列表、各種數學環境、算法環境、抄錄環境及引用等眾多元素。因此為降低沒有代碼基礎的使用者的門檻,細思(Thesis)論文在線編排系統利用BoosStrap4開發設計了一個模態框編輯器,簡稱LaTeX模板引擎宏替換編輯器,如圖4所示,通過點擊對應的圖標按鈕并記錄光標位置,調用JavaSrcipt創建并插入LaTeX模板引擎宏命令到Textarea組件(論文編輯框)中選中的位置。通過該編輯器還可以初始化LaTeX命令環境的相關參數。對于熟悉LaTeX命令的用戶,可在章節內容中書寫更加美觀的LaTeX排版命令。

圖4 LaTeX模板引擎宏替換編輯器
例如,在創建論文章節時,用戶可點擊編輯器工具欄中的小節、小小節按鈕分別輸入小節、小小節的名稱,系統將會創建小節(subsection{小節})與小小節(subsubsection{})的LaTeX命令,實現小節的創建,同時宏替換編輯器會自動生成該對應節的引用名label{sec:UUID},如果需要修改節名稱,通過修改{}中的文字即可。系統編譯源文件時,文章中的章節與其小節將會被自動編號。
點擊圖片按鈕,選擇圖片并提交后,系統根據文件路徑生成以下圖片環境,其LaTeX的模板代碼如圖5所示。

圖5 插入圖片
上述代碼中caption{圖片名稱}用于設置圖片的名稱、label{pic:UUID}用于設置圖片引用標識,同時在用戶點擊時光標所在位置生成 ef{pic:UUID}標簽命令用于自動引用當前插入的圖片,其中UUID是使用算法生成的32位字符串,它能保證同一篇論文的label標識符不會因為重復而產生引用錯誤。如需調整圖的顯示位置,修改自由組合調整htbp即可,實現圖顯示在代碼所在頁的當前位置h、頂部t、底部b或者該頁的任意位置p。
此外,針對理工科論文需要輸入眾多數學公式的問題,為避免記憶大量的LaTeX符號,用戶可以首先點擊公式環境按鈕,就會生成一個公式環境,同時產生一個引用標記label{equ:UIUD},通過MathType編輯軟件(或者WPS教育版LaTeX公式)獲取對應公式的LaTeX代碼,然后復制公式到LaTeX編輯環境中即可,在需要引用它的地方使用 ef{equ:UIUD}命令就可實現對公式的自動排序和引用。
論文中代表性的元素還有表格和列表,需要用戶傳入初始化參數來初始化表格、列表并自動生成對應的LaTeX語言宏替換,如表格環境接收參數后就可以創建出m行n列的表格,效果如圖6所示。同時表格環境與圖片環境相似,都存在label與caption標簽用于引用與聲明表格名稱,該模塊里也通過算法保證對應表格序號不會產生重復標示的功能。

圖6 插入表格
由于Java語言具有強大的靈活性與兼容性,同時安全性比較高,因此本系統利用Java Web服務器調用LaTeX編譯引擎來實現Tex源文件的編譯。傳統的外部程序調用通過Runtime類調用exe可執行文件的方式,但在執行CMD命令有一些缺點,例如當程序的執行存在大量輸出時會造成線程的阻塞,而當程序執行異常時因為錯誤輸出流沒有被接收同樣也會導致線程的阻塞。
為了解決上述的問題,在本系統中使用了第三方開源項目CommandExec,Apache Commons Exec的多線程操作模式。自動創建三個進程來處理執行標準輸入流,標準輸出流和錯誤輸出流,用來避免程序運行阻塞問題。
用戶使用系統的生成文件模塊編譯論文的Tex源文件,通過調用自定義的工具類CreateMode讀取數據庫中的相關信息,創建或更新用戶的Tex源文件,最后通過Commons Exec功能類調用LaTeX的編譯命令對用戶的Tex源文件進行編譯,生成論文的PDF文件。使用CommandExec調用LaTeX編譯引擎的代碼片段如下:
//獲取調用工具
CommandLine=CommandLine.parse
("cmd/c cd"+filepath+" & xeLaTeX main.Tex");
DefaulTexecutor executor=new DefaulTexecutor();
//創建輸出流用于接收錯誤信息
ByteArrayOutputStream bos
=newByteArrayOutputStream();
executor.setStreamHandler
(new PumpStreamHandler(bos,bos));
try {
//執行調用獲取返回值
exitValue=executor.execute(CommandLine)
}
catch (ExecuteException e)
{log.info(e.tostring());
}
系統編譯時調用該方法,當編譯結果返回為0時代表第一次的編譯順利完成,為了生成論文目錄,系統開始第二次編譯,返回為0時代表第二次的編譯也順利通過,當返回值為1時,代表編譯過程中發生錯誤,系統開始進行異常處理,接收編譯時產生的錯誤信息,并將錯誤信息保存在當前用戶的錯誤日志文件中,返回錯誤提示告知用戶查看錯誤日志,結束當前編譯進程。
為了便于及時編譯、預覽單個章節的排版效果,修改有誤的地方,本系統編譯窗口采用異步加載模式,用戶點擊編譯按鈕后可繼續撰寫章節內容而不用等待編譯過程,待章節編譯完成后右面的編譯窗口自動刷新顯示該章排版效果。及時編譯模塊界面如圖7和圖8所示。

圖7 及時編譯(左部分)

圖8 及時編譯(右部分)
使用ibitem[顯示符號]{引用標簽}可簡單實現LaTeX的參考文獻引用,但不能保證參考文獻的引用順序與最終的參考文獻列表順序一致。本系統通過建立BibTex數據庫的方式來實現靈活的文獻引用,格式使用國標GB/TB7714-2005《文后參考文獻著錄規則》所對應的bst文件(當然也可以是自定義文獻格式)確保學位論文里參考文獻符合國家規范。
系統提供BibTex文獻格式的輸入表單,如圖9所示,表單包括引用標識、文獻顯示名(便于使用者區別不同的參考文獻)、文獻內容(即BibTex格式的引用文獻整體)三部分構建一個可識別的BibTex格式的引用文獻,其中文獻內容需用戶在CNKI知網、百度學術、谷歌學術等網站輸入文獻的名字后復制出BibTex格式的參考文獻填入,然后修改BibTex格式的引用文獻整體的第一個字段為英文字母加年份后作為該參考文獻的引用標識兩個地方務必完全一致。上述三項輸入提交后就會向參考文獻bib庫添加一條記錄。該文獻被引用后系統將在源文件編譯時展示被引用的參考文獻。

圖9 參考文獻的添加
(1) 論文題目的智能切分換行。由于每個用戶的論文題目長度是不定的,需要封面論文題目根據封面設定的下劃線長度進行自動的判斷換行。本系統通過接收用戶輸入的論文題目字符串,遍歷判斷每一個字符的大小,長度到達7.5 cm(即設定的長度)添加繪制一個長度為7.5 cm的下劃線的LaTeX代碼命令,并填寫該段的分割字符串,參照國家標準和學位論文規范,論文題目超出三行提示論文題目過長,令用戶精簡后重新輸入。
(2) 在線預覽PDF文件。用戶既可以在撰寫時對單個章節進行編譯并進行快速預覽,也可在論文完成后對整體進行編譯預覽,細思(Thesis)論文在線編排系統使用開源插件PDFObject實現論文在線預覽與章節的單獨預覽,通過在線預覽方式讓用戶查看當前論文的排版效果,省去下載后才能查看文件的麻煩。使用PDFObject的動態綁定組件的功能在Web頁面中的某一組件內動態展示當前的PDF論文文件。
4.1.1論文封面
用戶登錄系統后通過該模塊可填寫封面信息,可選擇插入自己學校的論文封面Logo,為保證美觀,系統給出合適的圖片分辨率用于參考,界面如圖10所示。題目信息由用戶輸入,后臺會自動智能切分換行,其他信息會自動讀取用戶自己的個人注冊信息,并允許修改,封面日期可通過時間日期插件由用戶自行選取,用戶點擊提交后,系統將自動封裝其內容成為LaTeX模板引擎文本并存入數據庫。論文封面信息如圖11所示,編譯時系統替換Tex源文件中的描述字符進而生成論文封面的模板文件,編譯后生成的論文封面如圖12所示。

圖10 學校信息

圖11 論文封面數據

圖12 封面排版效果
4.1.2論文摘要、致謝、附錄
論文的摘要、致謝、附錄等模塊相似,系統只需要接收用戶的數據信息便可完成固定格式的排版任務,例如摘要部分操作流程為:用戶填入摘要信息,包括中文與英文摘要內容和關鍵詞,填寫英文題目,關鍵詞需要用分隔符號自行分割,在后期可通過修改按鈕修改自己的摘要信息。封面與摘要完成后用戶便可編譯文件查看最基本的排版效果,便于及時地進行調整。
4.1.3論文目錄
在LaTeX排版中節、圖片、表格的排序都是通過計數器自動設置的,目錄的生成通過 ableofcontents命令實現,系統將會自動根據章節內容中的section、subsection、subsubsection自動劃分為三級目錄,在功能實現時調用兩次XeLaTeX的編譯命令實現目錄的生成,目錄的最終效果如圖13所示。

圖13 目錄排版效果
4.1.4章節
論文的正文部分是由章節構成,通過使用LaTeX模板引擎宏替換編輯器,點擊相應的功能模塊,即可在當前光標位置生成一段LaTeX功能代碼,用戶通過簡單地補充即可完成對應元素的輸入操作。章節的輸入編輯界面如圖14所示,排版效果如圖15所示。

圖14 填寫章節信息

圖15 章節排版效果
4.1.5參考文獻
用戶通過參考文獻添加頁面添加參考文獻條目,首先通過輸入擬引用的文獻標題在CNKI知網、百度學術、谷歌學術等網站復制出BibTex格式的參考文獻到文獻內容框中。
接下來修改BibTex格式的引用文獻整體的第一個字段作為該文獻的引用標示,并拷貝該標示到引用標示框,拷貝BibTex格式中的title里的內容到文獻顯示名框,然后點擊提交即可。系統章節中引用某一文獻時,點擊該參考文獻后的引用按鈕將會彈出cite{}命令,將引用標示拷貝進來即可。參考文獻的添加如圖16所示,排版后顯示效果如圖17所示。

圖16 添加參考文獻演示

圖17 參考文獻排版效果
4.1.6錯誤排查
在LaTeX排版系統中,所有的排版效果都是通過命令標簽實現的,不熟悉LaTeX排版語言的用戶可能會誤用LaTeX的命令符,當不符合語法規范時將會拋出錯誤。細思(Thesis)論文在線編排系統在論文編譯時可通過標準錯誤輸出流獲取錯誤信息并將其存放在錯誤日志中,用戶可通過查看錯誤日志底部信息大致了解錯誤發生的大概范圍。整篇畢業論文的錯誤集中顯示可能難以排查,所以系統設計了單章編譯的方式,可單個章節地排查錯誤的位置,圖18所示為錯誤使用&字符時的錯誤頁面顯示效果,用戶通過讀取Warning這幾行可大致判斷錯誤發生的大致位置,通過對該位置附近進行檢查進而排除相關的錯誤。

圖18 錯誤排查
4.1.7論文生成與文件下載
論文撰寫完成后,用戶可通過論文生成模塊編譯源文件生成完整的論文,編譯成功完成后,用戶可以通過預覽界面查看論文最終排版效果。生成的PDF文件和Tex源文件均可以供用戶下載,一個用戶的所有論文文件均存放在該用戶的文件夾下,通過IO流獲取所有文件名稱并設置返回響應的響應頭為文件類型,通過IO流讀取并下載文件,用戶的論文PDF文件使用紅色字體標識,更容易找到該文件。
圖19為用戶文件列表,其中.tex后綴的文件為用戶論文各個模塊的Tex源文件,main.tex引用整合其他模塊源文件。main.pdf為生成的論文文件,系統名稱即可得到自己的畢業論文,論文也做了防下載設置,外部訪問PDF文件或者其他任何文件的請求都會被攔截,從而確保了所有論文文件的安全。

圖19 論文生成與文件下載
細思(Thesis)論文在線編排系統在河南某高校2020屆畢業生部分院系進行了推廣使用,通過對師生進行簡單的系統使用培訓,大都迅速地掌握了使用方法,很快就完成了論文的編輯和排版工作,生成了格式規范的畢業設計(論文),達到了學校的要求。通過對運行中師生的反饋意見進行了完善和修改,最終該系統被該校選定為全校的畢業論文(設計)排版系統,后續將與該校的畢業設計(論文)管理系統實現無縫對接,將課題申報、學生選題管理、過程管理(包含任務書下發、開題、過程指導記錄,中期檢查、中間版的存檔)、論文庫檢索、論文評閱、查重檢測、論文推優等模塊有機融合,從而為高校畢業生提供適用、便捷的畢業論文編輯排版工具。
本文基于LaTeX排版技術,采用B/S架構與MVC設計模式,利用Web程序收集用戶論文數據,通過編寫并實現自定義的LaTeX模板引擎宏替換編輯器對用戶數據封裝形成LaTeX語言文本,通過CommandExec調用LaTeX編譯引擎命令生成符合各高校規范的畢業論文,該系統提供源文件和生成文件一鍵下載,對后期的修改編輯和功能擴展提供非常友好的支持。該系統可令師生以更多的精力投入到科學問題的解決之中,而無須考慮排版問題,也不用記憶復雜的LaTeX排版命令,就可以輕松地實現規范的論文排版,為高質量完成畢業論文提供強有力的輔助工具。