孫祥輝 楊 雨 孫道強(qiáng)
(平頂山學(xué)院計(jì)算機(jī)學(xué)院 河南 平頂山 467000)
撰寫(xiě)畢業(yè)論文是高校學(xué)生完成學(xué)業(yè)的重要環(huán)節(jié),我國(guó)高校畢業(yè)論文有規(guī)定的格式及要求,雖然使用一般的編輯排版軟件也能夠完成,但是都相當(dāng)麻煩、耗時(shí)。如使用文檔編輯排版軟件WORD或WPS撰寫(xiě)畢業(yè)論文總是花費(fèi)師生大量寶貴時(shí)間去調(diào)整文章的格式,十分不方便,并且耗費(fèi)精力。因此,研究并設(shè)計(jì)一套適用、便捷的高校畢業(yè)論文編輯和自動(dòng)排版系統(tǒng)具有重要的現(xiàn)實(shí)意義。
目前,關(guān)于在線(xiàn)文檔的編排,國(guó)內(nèi)外有了一些相關(guān)的研究及產(chǎn)品,比如谷歌的在線(xiàn)文檔編輯平臺(tái)Google Docs、Overleaf的在線(xiàn)LaTeX論文共享編輯平臺(tái)、百度文檔、騰訊文檔、釘釘文檔,上述相關(guān)平臺(tái)要么對(duì)中文論文的支持不太友好,要么不太滿(mǎn)足高校畢業(yè)生的畢業(yè)論文撰寫(xiě)格式需求。Bahls等[1]研究了LaTeX軟件對(duì)科學(xué)、技術(shù)、工程和數(shù)學(xué)方向本科生論文寫(xiě)作過(guò)程的影響。Gong等[2]研究了利用VBA采用OLE自動(dòng)化技術(shù)進(jìn)行格式調(diào)整的探索。魏子然[3]研究Tex環(huán)境排版系統(tǒng)下的多語(yǔ)言文檔排版的開(kāi)發(fā)。Déjean等[4]研究了面向PDF的內(nèi)容和格式抽取的工作。王福貴等[5]研究并搭建了基于ASP.NET的在線(xiàn)LaTeX編譯環(huán)境,為在線(xiàn)題庫(kù)和數(shù)學(xué)公式系統(tǒng)的開(kāi)發(fā)提供了思路,但該系統(tǒng)不支持畢業(yè)論文的編輯和排版。張釕[6]研究了PapersCloud平臺(tái)的設(shè)計(jì)和搭建并提供了三種編輯科研論文的方式,為科研人員在線(xiàn)編排論文提供了方便,但該平臺(tái)在高校畢業(yè)論文的課題申報(bào)、選題管理、過(guò)程管理、答辯、推優(yōu)等管理對(duì)接方面比較欠缺。黃嵐[7]結(jié)合自己多年從事編輯工作的經(jīng)驗(yàn),探討了在科技論文排版中使用可視化LaTeX編輯器LyX模板的體會(huì)。此外,國(guó)內(nèi)不少“雙一流”高?;径加凶约旱腖aTeX畢業(yè)論文模板,但是基本上都是本地版本,需要學(xué)生在本地安裝Tex編譯軟件,且要求學(xué)生掌握很多LaTeX命令才可以使用,無(wú)形之中又增加了學(xué)生的負(fù)擔(dān),進(jìn)而限制了很多文科專(zhuān)業(yè)學(xué)生的推廣和使用,因此亟待設(shè)計(jì)并開(kāi)發(fā)一款可定制化、方便易用的基于LaTeX的高校畢業(yè)論文在線(xiàn)自動(dòng)編排系統(tǒng)。
LaTeX是由Leslie Lamport開(kāi)發(fā)的Tex擴(kuò)展命令集合,可以使文章內(nèi)容與排版格式分離,由于LaTeX在數(shù)學(xué)公式顯示、論文結(jié)構(gòu)排版方面的出色效果,已成為國(guó)際學(xué)術(shù)論文發(fā)表的主流文稿準(zhǔn)備格式[8-13]。眾多期刊都提供專(zhuān)用的排版和參考文獻(xiàn)類(lèi)包文件供投稿者下載并快速格式化手稿為擬投稿標(biāo)準(zhǔn)格式,然而,目前大多數(shù)期刊都沒(méi)提供在線(xiàn)編排功能,LaTeX編排工作基本都是在本地完成然后上傳到投稿系統(tǒng)。此外,LaTeX需要使用者在計(jì)算機(jī)編程方面有一些基礎(chǔ),且其在所見(jiàn)即所得方面還比較欠缺,這樣在一定程度上限制了基于LaTeX的排版系統(tǒng)的推廣和使用。為此,本文采用B/S架構(gòu)與MVC設(shè)計(jì)模式開(kāi)發(fā)一套基于LaTeX的高校論文在線(xiàn)自動(dòng)編排系統(tǒng)(簡(jiǎn)稱(chēng)細(xì)思(Thesis)論文在線(xiàn)編排系統(tǒng)),輔助師生在掌握少量LaTeX知識(shí)甚至零基礎(chǔ)的情況下使用該系統(tǒng)輕松完成畢業(yè)論文的編輯排版工作,將主要注意力投入到論文內(nèi)容質(zhì)量提升上去,撰寫(xiě)出更高質(zhì)量的畢業(yè)論文。
項(xiàng)目運(yùn)行環(huán)境采用Tex的發(fā)行版MikTex,在Windows系統(tǒng)下使用命令XeLaTeX和BibTex編譯Tex源文件及參考文獻(xiàn)生成PDF文件。使用安全性和穩(wěn)定性都比較好的Java語(yǔ)言作為開(kāi)發(fā)語(yǔ)言,同時(shí)使用輕便的開(kāi)源數(shù)據(jù)庫(kù)MySQL進(jìn)行數(shù)據(jù)存儲(chǔ)和管理,用Chrome瀏覽器或360瀏覽器極速模式進(jìn)行生成PDF文件的在線(xiàn)預(yù)覽。整個(gè)開(kāi)發(fā)平臺(tái)采用開(kāi)源軟件Eclipse進(jìn)行搭建與實(shí)現(xiàn)。
(1) MikTex:Tex是由Donald Knuth創(chuàng)造的基于底層編程語(yǔ)言的電子排版系統(tǒng),MikTex是目前常用的Tex編譯引擎,可以邊下邊編譯,在編譯過(guò)程中缺少哪個(gè)sty文件可實(shí)時(shí)下載,比較方便。
(2) Java:Sun公司推出的一種簡(jiǎn)單、安全、穩(wěn)定、跨平臺(tái)且開(kāi)源編程語(yǔ)言,廣泛應(yīng)用于企業(yè)級(jí)Web應(yīng)用開(kāi)發(fā)和移動(dòng)應(yīng)用開(kāi)發(fā)。
(3) Eclipse IDE:一款著名的跨平臺(tái)開(kāi)源集成開(kāi)發(fā)環(huán)境軟件,通過(guò)插件可以擴(kuò)展包括Java在內(nèi)的主流編程語(yǔ)言的開(kāi)發(fā)工作。
(4) BootStrap4:來(lái)自Twitter,包含了豐富的Web組件,利用這些組件,可以快速地搭建一個(gè)漂亮、功能完備的網(wǎng)站。
(5) Ajax:通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,Ajax可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。在不刷新整體頁(yè)面的情況下加載部分組件,進(jìn)而實(shí)現(xiàn)本系統(tǒng)的交互。
(6) SSH:一種流行的Web應(yīng)用程序開(kāi)源框架,支持?jǐn)?shù)據(jù)庫(kù)移植,穩(wěn)定程度高同時(shí)后期維護(hù)時(shí)需求技術(shù)成本低。
(7) PDFObject.js:一款開(kāi)源的嵌入PDF組件,實(shí)現(xiàn)PDF文件的簡(jiǎn)單在線(xiàn)預(yù)覽功能。
(8) Apache Commons Exec:Java進(jìn)程管理工具,調(diào)用外部進(jìn)程實(shí)現(xiàn)編譯功能,也是本系統(tǒng)中調(diào)用LaTeX軟件的關(guān)鍵技術(shù)。
細(xì)思(Thesis)論文在線(xiàn)編排系統(tǒng)后臺(tái)使用的是SSH架構(gòu)搭建的服務(wù)器,前端是基于MVC的設(shè)計(jì)思想,采用MySQL數(shù)據(jù)庫(kù)存儲(chǔ)用戶(hù)論文信息。前端和后臺(tái)之間利用請(qǐng)求響應(yīng)修改數(shù)據(jù)進(jìn)而修改論文的Tex源文件,實(shí)現(xiàn)了數(shù)據(jù)的動(dòng)態(tài)更新。使用JAVA語(yǔ)言開(kāi)發(fā)Web項(xiàng)目,用戶(hù)無(wú)須搭建LaTeX運(yùn)行環(huán)境即可實(shí)現(xiàn)在線(xiàn)編輯和排版論文,其編譯運(yùn)行的流程如圖1所示。
圖1 系統(tǒng)流程
為了實(shí)現(xiàn)系統(tǒng)層次分明,減少耦合,系統(tǒng)總體劃分為三部分:文件管理模塊、LaTeX引擎宏封裝模塊、數(shù)據(jù)編輯模塊。
(1) 文件管理模塊:創(chuàng)建、修改論文的Tex源文件以及呈列生成的文件。在編譯論文的Tex源文件之前,該模塊獲取論文信息創(chuàng)建或者修改Tex源文件,待系統(tǒng)編譯完成后該模塊清除多余編譯文件,呈列出生成的論文文件以便下載。
(2) LaTeX引擎封裝宏包模塊:用于實(shí)現(xiàn)對(duì)LaTeX功能模塊的宏封裝,快速創(chuàng)建LaTeX的圖、表、引用等功能代碼,簡(jiǎn)化LaTeX語(yǔ)言的使用。
(3) 數(shù)據(jù)編輯模塊:通過(guò)Web頁(yè)面實(shí)現(xiàn)對(duì)論文各個(gè)模塊信息的修改與添加,結(jié)合LaTeX排版系統(tǒng)格式與內(nèi)容分離的特性實(shí)現(xiàn)模塊的修改不影響其他模塊的排版效果。
按照功能將系統(tǒng)的模塊進(jìn)行劃分,如圖2所示。
圖2 系統(tǒng)功能模塊劃分
以論文的不同模塊劃分實(shí)體,所有實(shí)體通過(guò)user_id外鍵與當(dāng)前用戶(hù)綁定,通過(guò)用戶(hù)id可將該用戶(hù)的一篇論文的所有模塊組合起來(lái)形成一篇完整的論文,表與表之間相互獨(dú)立且被唯一主鍵標(biāo)識(shí)符合數(shù)據(jù)庫(kù)表設(shè)計(jì)第三范式,保證了數(shù)據(jù)的低冗余,消除了表之間的傳遞依賴(lài),系統(tǒng)的E-R圖如圖3所示。
圖3 系統(tǒng)E-R圖
對(duì)應(yīng)于系統(tǒng)的功能模塊劃分,數(shù)據(jù)庫(kù)共設(shè)計(jì)了9張表。每個(gè)表的詳細(xì)信息見(jiàn)表1。
表1 數(shù)據(jù)庫(kù)表信息
續(xù)表1
LaTeX排版的強(qiáng)大和關(guān)鍵之處在于LaTeX標(biāo)簽語(yǔ)言命令,但是命令眾多不易記憶且論文章節(jié)的內(nèi)容是復(fù)雜的、不確定的,涉及節(jié)、小節(jié)、圖片、表格、公式、列表、各種數(shù)學(xué)環(huán)境、算法環(huán)境、抄錄環(huán)境及引用等眾多元素。因此為降低沒(méi)有代碼基礎(chǔ)的使用者的門(mén)檻,細(xì)思(Thesis)論文在線(xiàn)編排系統(tǒng)利用BoosStrap4開(kāi)發(fā)設(shè)計(jì)了一個(gè)模態(tài)框編輯器,簡(jiǎn)稱(chēng)LaTeX模板引擎宏替換編輯器,如圖4所示,通過(guò)點(diǎn)擊對(duì)應(yīng)的圖標(biāo)按鈕并記錄光標(biāo)位置,調(diào)用JavaSrcipt創(chuàng)建并插入LaTeX模板引擎宏命令到Textarea組件(論文編輯框)中選中的位置。通過(guò)該編輯器還可以初始化LaTeX命令環(huán)境的相關(guān)參數(shù)。對(duì)于熟悉LaTeX命令的用戶(hù),可在章節(jié)內(nèi)容中書(shū)寫(xiě)更加美觀的LaTeX排版命令。
圖4 LaTeX模板引擎宏替換編輯器
例如,在創(chuàng)建論文章節(jié)時(shí),用戶(hù)可點(diǎn)擊編輯器工具欄中的小節(jié)、小小節(jié)按鈕分別輸入小節(jié)、小小節(jié)的名稱(chēng),系統(tǒng)將會(huì)創(chuàng)建小節(jié)(subsection{小節(jié)})與小小節(jié)(subsubsection{})的LaTeX命令,實(shí)現(xiàn)小節(jié)的創(chuàng)建,同時(shí)宏替換編輯器會(huì)自動(dòng)生成該對(duì)應(yīng)節(jié)的引用名label{sec:UUID},如果需要修改節(jié)名稱(chēng),通過(guò)修改{}中的文字即可。系統(tǒng)編譯源文件時(shí),文章中的章節(jié)與其小節(jié)將會(huì)被自動(dòng)編號(hào)。
點(diǎn)擊圖片按鈕,選擇圖片并提交后,系統(tǒng)根據(jù)文件路徑生成以下圖片環(huán)境,其LaTeX的模板代碼如圖5所示。
圖5 插入圖片
上述代碼中caption{圖片名稱(chēng)}用于設(shè)置圖片的名稱(chēng)、label{pic:UUID}用于設(shè)置圖片引用標(biāo)識(shí),同時(shí)在用戶(hù)點(diǎn)擊時(shí)光標(biāo)所在位置生成 ef{pic:UUID}標(biāo)簽命令用于自動(dòng)引用當(dāng)前插入的圖片,其中UUID是使用算法生成的32位字符串,它能保證同一篇論文的label標(biāo)識(shí)符不會(huì)因?yàn)橹貜?fù)而產(chǎn)生引用錯(cuò)誤。如需調(diào)整圖的顯示位置,修改自由組合調(diào)整htbp即可,實(shí)現(xiàn)圖顯示在代碼所在頁(yè)的當(dāng)前位置h、頂部t、底部b或者該頁(yè)的任意位置p。
此外,針對(duì)理工科論文需要輸入眾多數(shù)學(xué)公式的問(wèn)題,為避免記憶大量的LaTeX符號(hào),用戶(hù)可以首先點(diǎn)擊公式環(huán)境按鈕,就會(huì)生成一個(gè)公式環(huán)境,同時(shí)產(chǎn)生一個(gè)引用標(biāo)記label{equ:UIUD},通過(guò)MathType編輯軟件(或者WPS教育版LaTeX公式)獲取對(duì)應(yīng)公式的LaTeX代碼,然后復(fù)制公式到LaTeX編輯環(huán)境中即可,在需要引用它的地方使用 ef{equ:UIUD}命令就可實(shí)現(xiàn)對(duì)公式的自動(dòng)排序和引用。
論文中代表性的元素還有表格和列表,需要用戶(hù)傳入初始化參數(shù)來(lái)初始化表格、列表并自動(dòng)生成對(duì)應(yīng)的LaTeX語(yǔ)言宏替換,如表格環(huán)境接收參數(shù)后就可以創(chuàng)建出m行n列的表格,效果如圖6所示。同時(shí)表格環(huán)境與圖片環(huán)境相似,都存在label與caption標(biāo)簽用于引用與聲明表格名稱(chēng),該模塊里也通過(guò)算法保證對(duì)應(yīng)表格序號(hào)不會(huì)產(chǎn)生重復(fù)標(biāo)示的功能。
圖6 插入表格
由于Java語(yǔ)言具有強(qiáng)大的靈活性與兼容性,同時(shí)安全性比較高,因此本系統(tǒng)利用Java Web服務(wù)器調(diào)用LaTeX編譯引擎來(lái)實(shí)現(xiàn)Tex源文件的編譯。傳統(tǒng)的外部程序調(diào)用通過(guò)Runtime類(lèi)調(diào)用exe可執(zhí)行文件的方式,但在執(zhí)行CMD命令有一些缺點(diǎn),例如當(dāng)程序的執(zhí)行存在大量輸出時(shí)會(huì)造成線(xiàn)程的阻塞,而當(dāng)程序執(zhí)行異常時(shí)因?yàn)殄e(cuò)誤輸出流沒(méi)有被接收同樣也會(huì)導(dǎo)致線(xiàn)程的阻塞。
為了解決上述的問(wèn)題,在本系統(tǒng)中使用了第三方開(kāi)源項(xiàng)目CommandExec,Apache Commons Exec的多線(xiàn)程操作模式。自動(dòng)創(chuàng)建三個(gè)進(jìn)程來(lái)處理執(zhí)行標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流和錯(cuò)誤輸出流,用來(lái)避免程序運(yùn)行阻塞問(wèn)題。
用戶(hù)使用系統(tǒng)的生成文件模塊編譯論文的Tex源文件,通過(guò)調(diào)用自定義的工具類(lèi)CreateMode讀取數(shù)據(jù)庫(kù)中的相關(guān)信息,創(chuàng)建或更新用戶(hù)的Tex源文件,最后通過(guò)Commons Exec功能類(lèi)調(diào)用LaTeX的編譯命令對(duì)用戶(hù)的Tex源文件進(jìn)行編譯,生成論文的PDF文件。使用CommandExec調(diào)用LaTeX編譯引擎的代碼片段如下:
//獲取調(diào)用工具
CommandLine=CommandLine.parse
("cmd/c cd"+filepath+" & xeLaTeX main.Tex");
DefaulTexecutor executor=new DefaulTexecutor();
//創(chuàng)建輸出流用于接收錯(cuò)誤信息
ByteArrayOutputStream bos
=newByteArrayOutputStream();
executor.setStreamHandler
(new PumpStreamHandler(bos,bos));
try {
//執(zhí)行調(diào)用獲取返回值
exitValue=executor.execute(CommandLine)
}
catch (ExecuteException e)
{log.info(e.tostring());
}
系統(tǒng)編譯時(shí)調(diào)用該方法,當(dāng)編譯結(jié)果返回為0時(shí)代表第一次的編譯順利完成,為了生成論文目錄,系統(tǒng)開(kāi)始第二次編譯,返回為0時(shí)代表第二次的編譯也順利通過(guò),當(dāng)返回值為1時(shí),代表編譯過(guò)程中發(fā)生錯(cuò)誤,系統(tǒng)開(kāi)始進(jìn)行異常處理,接收編譯時(shí)產(chǎn)生的錯(cuò)誤信息,并將錯(cuò)誤信息保存在當(dāng)前用戶(hù)的錯(cuò)誤日志文件中,返回錯(cuò)誤提示告知用戶(hù)查看錯(cuò)誤日志,結(jié)束當(dāng)前編譯進(jìn)程。
為了便于及時(shí)編譯、預(yù)覽單個(gè)章節(jié)的排版效果,修改有誤的地方,本系統(tǒng)編譯窗口采用異步加載模式,用戶(hù)點(diǎn)擊編譯按鈕后可繼續(xù)撰寫(xiě)章節(jié)內(nèi)容而不用等待編譯過(guò)程,待章節(jié)編譯完成后右面的編譯窗口自動(dòng)刷新顯示該章排版效果。及時(shí)編譯模塊界面如圖7和圖8所示。
圖7 及時(shí)編譯(左部分)
圖8 及時(shí)編譯(右部分)
使用ibitem[顯示符號(hào)]{引用標(biāo)簽}可簡(jiǎn)單實(shí)現(xiàn)LaTeX的參考文獻(xiàn)引用,但不能保證參考文獻(xiàn)的引用順序與最終的參考文獻(xiàn)列表順序一致。本系統(tǒng)通過(guò)建立BibTex數(shù)據(jù)庫(kù)的方式來(lái)實(shí)現(xiàn)靈活的文獻(xiàn)引用,格式使用國(guó)標(biāo)GB/TB7714-2005《文后參考文獻(xiàn)著錄規(guī)則》所對(duì)應(yīng)的bst文件(當(dāng)然也可以是自定義文獻(xiàn)格式)確保學(xué)位論文里參考文獻(xiàn)符合國(guó)家規(guī)范。
系統(tǒng)提供BibTex文獻(xiàn)格式的輸入表單,如圖9所示,表單包括引用標(biāo)識(shí)、文獻(xiàn)顯示名(便于使用者區(qū)別不同的參考文獻(xiàn))、文獻(xiàn)內(nèi)容(即BibTex格式的引用文獻(xiàn)整體)三部分構(gòu)建一個(gè)可識(shí)別的BibTex格式的引用文獻(xiàn),其中文獻(xiàn)內(nèi)容需用戶(hù)在CNKI知網(wǎng)、百度學(xué)術(shù)、谷歌學(xué)術(shù)等網(wǎng)站輸入文獻(xiàn)的名字后復(fù)制出BibTex格式的參考文獻(xiàn)填入,然后修改BibTex格式的引用文獻(xiàn)整體的第一個(gè)字段為英文字母加年份后作為該參考文獻(xiàn)的引用標(biāo)識(shí)兩個(gè)地方務(wù)必完全一致。上述三項(xiàng)輸入提交后就會(huì)向參考文獻(xiàn)bib庫(kù)添加一條記錄。該文獻(xiàn)被引用后系統(tǒng)將在源文件編譯時(shí)展示被引用的參考文獻(xiàn)。
圖9 參考文獻(xiàn)的添加
(1) 論文題目的智能切分換行。由于每個(gè)用戶(hù)的論文題目長(zhǎng)度是不定的,需要封面論文題目根據(jù)封面設(shè)定的下劃線(xiàn)長(zhǎng)度進(jìn)行自動(dòng)的判斷換行。本系統(tǒng)通過(guò)接收用戶(hù)輸入的論文題目字符串,遍歷判斷每一個(gè)字符的大小,長(zhǎng)度到達(dá)7.5 cm(即設(shè)定的長(zhǎng)度)添加繪制一個(gè)長(zhǎng)度為7.5 cm的下劃線(xiàn)的LaTeX代碼命令,并填寫(xiě)該段的分割字符串,參照國(guó)家標(biāo)準(zhǔn)和學(xué)位論文規(guī)范,論文題目超出三行提示論文題目過(guò)長(zhǎng),令用戶(hù)精簡(jiǎn)后重新輸入。
(2) 在線(xiàn)預(yù)覽PDF文件。用戶(hù)既可以在撰寫(xiě)時(shí)對(duì)單個(gè)章節(jié)進(jìn)行編譯并進(jìn)行快速預(yù)覽,也可在論文完成后對(duì)整體進(jìn)行編譯預(yù)覽,細(xì)思(Thesis)論文在線(xiàn)編排系統(tǒng)使用開(kāi)源插件PDFObject實(shí)現(xiàn)論文在線(xiàn)預(yù)覽與章節(jié)的單獨(dú)預(yù)覽,通過(guò)在線(xiàn)預(yù)覽方式讓用戶(hù)查看當(dāng)前論文的排版效果,省去下載后才能查看文件的麻煩。使用PDFObject的動(dòng)態(tài)綁定組件的功能在Web頁(yè)面中的某一組件內(nèi)動(dòng)態(tài)展示當(dāng)前的PDF論文文件。
4.1.1論文封面
用戶(hù)登錄系統(tǒng)后通過(guò)該模塊可填寫(xiě)封面信息,可選擇插入自己學(xué)校的論文封面Logo,為保證美觀,系統(tǒng)給出合適的圖片分辨率用于參考,界面如圖10所示。題目信息由用戶(hù)輸入,后臺(tái)會(huì)自動(dòng)智能切分換行,其他信息會(huì)自動(dòng)讀取用戶(hù)自己的個(gè)人注冊(cè)信息,并允許修改,封面日期可通過(guò)時(shí)間日期插件由用戶(hù)自行選取,用戶(hù)點(diǎn)擊提交后,系統(tǒng)將自動(dòng)封裝其內(nèi)容成為L(zhǎng)aTeX模板引擎文本并存入數(shù)據(jù)庫(kù)。論文封面信息如圖11所示,編譯時(shí)系統(tǒng)替換Tex源文件中的描述字符進(jìn)而生成論文封面的模板文件,編譯后生成的論文封面如圖12所示。
圖10 學(xué)校信息
圖11 論文封面數(shù)據(jù)
圖12 封面排版效果
4.1.2論文摘要、致謝、附錄
論文的摘要、致謝、附錄等模塊相似,系統(tǒng)只需要接收用戶(hù)的數(shù)據(jù)信息便可完成固定格式的排版任務(wù),例如摘要部分操作流程為:用戶(hù)填入摘要信息,包括中文與英文摘要內(nèi)容和關(guān)鍵詞,填寫(xiě)英文題目,關(guān)鍵詞需要用分隔符號(hào)自行分割,在后期可通過(guò)修改按鈕修改自己的摘要信息。封面與摘要完成后用戶(hù)便可編譯文件查看最基本的排版效果,便于及時(shí)地進(jìn)行調(diào)整。
4.1.3論文目錄
在LaTeX排版中節(jié)、圖片、表格的排序都是通過(guò)計(jì)數(shù)器自動(dòng)設(shè)置的,目錄的生成通過(guò) ableofcontents命令實(shí)現(xiàn),系統(tǒng)將會(huì)自動(dòng)根據(jù)章節(jié)內(nèi)容中的section、subsection、subsubsection自動(dòng)劃分為三級(jí)目錄,在功能實(shí)現(xiàn)時(shí)調(diào)用兩次XeLaTeX的編譯命令實(shí)現(xiàn)目錄的生成,目錄的最終效果如圖13所示。
圖13 目錄排版效果
4.1.4章節(jié)
論文的正文部分是由章節(jié)構(gòu)成,通過(guò)使用LaTeX模板引擎宏替換編輯器,點(diǎn)擊相應(yīng)的功能模塊,即可在當(dāng)前光標(biāo)位置生成一段LaTeX功能代碼,用戶(hù)通過(guò)簡(jiǎn)單地補(bǔ)充即可完成對(duì)應(yīng)元素的輸入操作。章節(jié)的輸入編輯界面如圖14所示,排版效果如圖15所示。
圖14 填寫(xiě)章節(jié)信息
圖15 章節(jié)排版效果
4.1.5參考文獻(xiàn)
用戶(hù)通過(guò)參考文獻(xiàn)添加頁(yè)面添加參考文獻(xiàn)條目,首先通過(guò)輸入擬引用的文獻(xiàn)標(biāo)題在CNKI知網(wǎng)、百度學(xué)術(shù)、谷歌學(xué)術(shù)等網(wǎng)站復(fù)制出BibTex格式的參考文獻(xiàn)到文獻(xiàn)內(nèi)容框中。
接下來(lái)修改BibTex格式的引用文獻(xiàn)整體的第一個(gè)字段作為該文獻(xiàn)的引用標(biāo)示,并拷貝該標(biāo)示到引用標(biāo)示框,拷貝BibTex格式中的title里的內(nèi)容到文獻(xiàn)顯示名框,然后點(diǎn)擊提交即可。系統(tǒng)章節(jié)中引用某一文獻(xiàn)時(shí),點(diǎn)擊該參考文獻(xiàn)后的引用按鈕將會(huì)彈出cite{}命令,將引用標(biāo)示拷貝進(jìn)來(lái)即可。參考文獻(xiàn)的添加如圖16所示,排版后顯示效果如圖17所示。
圖16 添加參考文獻(xiàn)演示
圖17 參考文獻(xiàn)排版效果
4.1.6錯(cuò)誤排查
在LaTeX排版系統(tǒng)中,所有的排版效果都是通過(guò)命令標(biāo)簽實(shí)現(xiàn)的,不熟悉LaTeX排版語(yǔ)言的用戶(hù)可能會(huì)誤用LaTeX的命令符,當(dāng)不符合語(yǔ)法規(guī)范時(shí)將會(huì)拋出錯(cuò)誤。細(xì)思(Thesis)論文在線(xiàn)編排系統(tǒng)在論文編譯時(shí)可通過(guò)標(biāo)準(zhǔn)錯(cuò)誤輸出流獲取錯(cuò)誤信息并將其存放在錯(cuò)誤日志中,用戶(hù)可通過(guò)查看錯(cuò)誤日志底部信息大致了解錯(cuò)誤發(fā)生的大概范圍。整篇畢業(yè)論文的錯(cuò)誤集中顯示可能難以排查,所以系統(tǒng)設(shè)計(jì)了單章編譯的方式,可單個(gè)章節(jié)地排查錯(cuò)誤的位置,圖18所示為錯(cuò)誤使用&字符時(shí)的錯(cuò)誤頁(yè)面顯示效果,用戶(hù)通過(guò)讀取Warning這幾行可大致判斷錯(cuò)誤發(fā)生的大致位置,通過(guò)對(duì)該位置附近進(jìn)行檢查進(jìn)而排除相關(guān)的錯(cuò)誤。
圖18 錯(cuò)誤排查
4.1.7論文生成與文件下載
論文撰寫(xiě)完成后,用戶(hù)可通過(guò)論文生成模塊編譯源文件生成完整的論文,編譯成功完成后,用戶(hù)可以通過(guò)預(yù)覽界面查看論文最終排版效果。生成的PDF文件和Tex源文件均可以供用戶(hù)下載,一個(gè)用戶(hù)的所有論文文件均存放在該用戶(hù)的文件夾下,通過(guò)IO流獲取所有文件名稱(chēng)并設(shè)置返回響應(yīng)的響應(yīng)頭為文件類(lèi)型,通過(guò)IO流讀取并下載文件,用戶(hù)的論文PDF文件使用紅色字體標(biāo)識(shí),更容易找到該文件。
圖19為用戶(hù)文件列表,其中.tex后綴的文件為用戶(hù)論文各個(gè)模塊的Tex源文件,main.tex引用整合其他模塊源文件。main.pdf為生成的論文文件,系統(tǒng)名稱(chēng)即可得到自己的畢業(yè)論文,論文也做了防下載設(shè)置,外部訪(fǎng)問(wèn)PDF文件或者其他任何文件的請(qǐng)求都會(huì)被攔截,從而確保了所有論文文件的安全。
圖19 論文生成與文件下載
細(xì)思(Thesis)論文在線(xiàn)編排系統(tǒng)在河南某高校2020屆畢業(yè)生部分院系進(jìn)行了推廣使用,通過(guò)對(duì)師生進(jìn)行簡(jiǎn)單的系統(tǒng)使用培訓(xùn),大都迅速地掌握了使用方法,很快就完成了論文的編輯和排版工作,生成了格式規(guī)范的畢業(yè)設(shè)計(jì)(論文),達(dá)到了學(xué)校的要求。通過(guò)對(duì)運(yùn)行中師生的反饋意見(jiàn)進(jìn)行了完善和修改,最終該系統(tǒng)被該校選定為全校的畢業(yè)論文(設(shè)計(jì))排版系統(tǒng),后續(xù)將與該校的畢業(yè)設(shè)計(jì)(論文)管理系統(tǒng)實(shí)現(xiàn)無(wú)縫對(duì)接,將課題申報(bào)、學(xué)生選題管理、過(guò)程管理(包含任務(wù)書(shū)下發(fā)、開(kāi)題、過(guò)程指導(dǎo)記錄,中期檢查、中間版的存檔)、論文庫(kù)檢索、論文評(píng)閱、查重檢測(cè)、論文推優(yōu)等模塊有機(jī)融合,從而為高校畢業(yè)生提供適用、便捷的畢業(yè)論文編輯排版工具。
本文基于LaTeX排版技術(shù),采用B/S架構(gòu)與MVC設(shè)計(jì)模式,利用Web程序收集用戶(hù)論文數(shù)據(jù),通過(guò)編寫(xiě)并實(shí)現(xiàn)自定義的LaTeX模板引擎宏替換編輯器對(duì)用戶(hù)數(shù)據(jù)封裝形成LaTeX語(yǔ)言文本,通過(guò)CommandExec調(diào)用LaTeX編譯引擎命令生成符合各高校規(guī)范的畢業(yè)論文,該系統(tǒng)提供源文件和生成文件一鍵下載,對(duì)后期的修改編輯和功能擴(kuò)展提供非常友好的支持。該系統(tǒng)可令師生以更多的精力投入到科學(xué)問(wèn)題的解決之中,而無(wú)須考慮排版問(wèn)題,也不用記憶復(fù)雜的LaTeX排版命令,就可以輕松地實(shí)現(xiàn)規(guī)范的論文排版,為高質(zhì)量完成畢業(yè)論文提供強(qiáng)有力的輔助工具。