納利軍
摘要:大學(xué)本科生的畢業(yè)論文格式規(guī)范化問題一直困擾著廣大師生,“畢業(yè)論文格式修訂系統(tǒng)”就是為了解決這個(gè)痛點(diǎn)而開發(fā)的一套軟件。它是在Office Open XML文檔規(guī)范的基礎(chǔ)上,引用Open XML SDK類集并結(jié)合C#的面向?qū)ο蠹夹g(shù)開發(fā)而成的。它提供了一個(gè)規(guī)范化的Word畢業(yè)論文模板,并對(duì)套用模板撰寫的論文進(jìn)行全文檔自動(dòng)格式修訂,修訂后的論文達(dá)到了寧夏大學(xué)教務(wù)處對(duì)于本科生畢業(yè)論文格式撰寫規(guī)范的要求,歷經(jīng)實(shí)測(cè)效果良好。
關(guān)鍵詞:Open XML;畢業(yè)論文;論文格式規(guī)范化;自動(dòng)格式修訂;Word編程
中圖分類號(hào):TP311.52? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)09-0041-03
1 引言
畢業(yè)論文的質(zhì)量是衡量學(xué)生畢業(yè)成果的最重要的依據(jù)。論文的質(zhì)量一般從兩個(gè)方面來考量,一方面是論文的內(nèi)容,另一方面是論文的格式。能夠?qū)懗鲆黄R規(guī)范、格式符合要求的論文,是一個(gè)大學(xué)畢業(yè)生的必備素質(zhì)。
為此,學(xué)校、學(xué)院兩級(jí)相關(guān)單位每年都會(huì)頒布最新的本科畢業(yè)生論文格式撰寫規(guī)范,三令五申要求畢業(yè)生必須嚴(yán)格遵照?qǐng)?zhí)行,然而學(xué)生們實(shí)際的執(zhí)行情況仍不容樂觀。其中的原因當(dāng)然有部分學(xué)生的不認(rèn)真和不重視,但更重要的原因就是過細(xì)過多的格式要求條款常常讓學(xué)生和指導(dǎo)教師顧此失彼。
“寧夏大學(xué)本科生畢業(yè)論文格式修訂系統(tǒng)”(以下簡(jiǎn)稱“系統(tǒng)”)就是為了解決這一痛點(diǎn)而開發(fā)。學(xué)生在套用規(guī)定的Word模板編寫完論文后,只須將論文導(dǎo)入系統(tǒng),即可完成全文檔格式的自動(dòng)修訂工作。系統(tǒng)在規(guī)劃設(shè)計(jì)階段借鑒了賴曉晨[1]老師在開發(fā)“學(xué)位論文格式規(guī)范自動(dòng)檢查系統(tǒng)”中所使用到的Open XML軟件開發(fā)工具。
2 系統(tǒng)特點(diǎn)
2.1 基于Open XML
Office Open XML是一種基于XML的Office文檔格式規(guī)范,是微軟提出的一個(gè)開放的國(guó)際性標(biāo)準(zhǔn)[2],并在Microsoft Office 2007之后的版本開始應(yīng)用。符合該規(guī)范的文檔,其典型特征是在傳統(tǒng)的office文件擴(kuò)展名后面添加了字母“x”,例如Word文件的后綴名為“.docx”。查看一個(gè)Word文件的內(nèi)部Open XML文檔的簡(jiǎn)便方法是在文件擴(kuò)展名后再添加一個(gè)“.zip”后綴[3](例如將a.docx更改為a.docx.zip),將文件轉(zhuǎn)換為一個(gè)ZIP壓縮格式的文件夾,即可打開文件夾觀察到其內(nèi)部的多個(gè)XML文檔。
Open XML SDK是一個(gè)類集合,通過這些類可以創(chuàng)建和處理遵循Office Open XML文檔格式規(guī)范的Open XML文檔[4]。在系統(tǒng)的開發(fā)過程中所引用的DocumentFormat.OpenXml.Wordprocessing組件[5]就是SDK類集中專用于處理Word文檔的應(yīng)用程序接口。該組件可在Visual Studio開發(fā)環(huán)境中通過NuGet包管理器導(dǎo)入。
開發(fā)本系統(tǒng)所使用的編程語(yǔ)言是C#。C#是一種新式編程語(yǔ)言,不僅面向?qū)ο?,還類型安全。開發(fā)人員利用C#能夠生成在.NET中運(yùn)行的多種安全可靠的應(yīng)用程序[6]。
2.2 套用標(biāo)準(zhǔn)論文模板
系統(tǒng)提供了一個(gè)遵照學(xué)校的“本科生畢業(yè)論文格式撰寫規(guī)范”編制的模板,其突出特點(diǎn)是運(yùn)用了Word提供的“限制編輯”功能。一方面,模板將一些固定不變的文檔內(nèi)容(例如頁(yè)邊距、節(jié)、論文封面上的學(xué)號(hào)姓名等條目名稱、中英文摘要標(biāo)題等)作為不可編輯區(qū)域,不允許學(xué)生做任何文字或格式上的改動(dòng);另一方面,留出幾個(gè)可編輯區(qū)域,分別對(duì)應(yīng)著中英文摘要、正文、參考文獻(xiàn)等內(nèi)容部分,允許學(xué)生在這些區(qū)域內(nèi)自由編輯。圖1是論文模板的封面,其中用“[]”擴(kuò)起來的區(qū)域是可編輯區(qū)域。
使用限制編輯功能,不僅可以將畢業(yè)論文中的標(biāo)準(zhǔn)化組成部分保護(hù)起來,還為系統(tǒng)定位論文的不同編輯區(qū)域提供了可靠的依據(jù)。
2.3 充分應(yīng)用樣式
“本科生畢業(yè)論文格式撰寫規(guī)范”里針對(duì)論文的不同部分(中英文摘要、正文、參考文獻(xiàn)等)有不同的段落、文字方面的格式要求,基于此,系統(tǒng)新建了許多的段落和字符樣式,在重新修訂論文的過程中針對(duì)論文的不同部分應(yīng)用不同的樣式。
使用樣式的優(yōu)點(diǎn)之一是多種格式統(tǒng)一管理,例如將段落的縮進(jìn)、行間距等多個(gè)格式放置在一個(gè)樣式內(nèi);優(yōu)點(diǎn)之二就是只改一處卻能覆蓋全局,例如需要將正文的字體由四號(hào)字改為小四號(hào)字體,則只需要修改在正文上所應(yīng)用的樣式即可。
2.4 修訂而不是檢測(cè)
與目前國(guó)內(nèi)大多數(shù)高校所開發(fā)的論文格式檢測(cè)系統(tǒng)不同,系統(tǒng)采用的是修訂的形式,簡(jiǎn)單來說就是將文檔中(例如一個(gè)段落)舊有的格式刪除,而直接應(yīng)用指定的樣式。這樣做的好處是處理速度快,實(shí)現(xiàn)方式簡(jiǎn)單。Word文檔的一個(gè)段落就有包括縮進(jìn)、行間距等十幾種格式,針對(duì)段落的每一個(gè)格式來判斷對(duì)錯(cuò)不僅煩瑣而且耗時(shí)。需要特別指出的是,修訂只替換文檔格式,而不更改其內(nèi)容,不會(huì)造成原始資料的損失。
采用修訂形式的另外一個(gè)好處就是切實(shí)減輕了師生負(fù)擔(dān)。學(xué)生在撰寫論文時(shí)可以完全不考慮格式方面的問題,寫完并經(jīng)過系統(tǒng)的重新修訂后,只需要再做去除多余的空格空行、修改書寫不規(guī)范的各級(jí)標(biāo)題等簡(jiǎn)單工作。
2.5 采用多線程機(jī)制
本科生畢業(yè)論文的頁(yè)數(shù)通常都在40頁(yè)左右,對(duì)此進(jìn)行逐段落的修訂比較耗時(shí)。本系統(tǒng)將這種耗時(shí)操作交由后臺(tái)線程處理,并在前臺(tái)通過進(jìn)度條顯示修訂進(jìn)度,從而保證了系統(tǒng)不進(jìn)入“假死”狀態(tài)。
3 畢業(yè)論文的核心架構(gòu)
圖2顯示了畢業(yè)論文模板所使用到的Wordprocessing組件中的一些常用類及其所對(duì)應(yīng)的XML標(biāo)簽,完整的“Word文檔結(jié)構(gòu)”[7]請(qǐng)參閱微軟官方文檔。
其中,WordprocessingDocument是頂層類,使用該類的Open方法可以打開一個(gè)Word文件。Body、Header和Styles都是WordprocessingDocument的后代子節(jié)點(diǎn)類,其中Body對(duì)應(yīng)著document.xml文檔中的<w:body>標(biāo)簽,該類代表一個(gè)Word文件的主體,Word文檔中所有的文字、表格和圖片摘要等信息都內(nèi)嵌在主體里;Header對(duì)應(yīng)著header1.xml文檔中的<w:hdr>標(biāo)簽,該類代表畢業(yè)論文的頁(yè)眉;Styles對(duì)應(yīng)著styles.xml文檔中的<w:styles>標(biāo)簽,該類代表樣式表,系統(tǒng)所定義的所有的段落、字符或表格等樣式都儲(chǔ)存于樣式表中。
Paragraph、Table和SdtBlock是Body的直接子節(jié)點(diǎn)類。其中Paragraph代表段落,是本系統(tǒng)修訂的基本單元;Table代表表格,Word中的每個(gè)表格都獨(dú)立于段落而單獨(dú)存在;SdtBlock代表塊級(jí)結(jié)構(gòu)化文檔標(biāo)記,畢業(yè)論文中的目錄就內(nèi)嵌在該塊級(jí)元素中。
ParagraphProperties、Run、Hyperlink和PermStart是Paragraph的直接子節(jié)點(diǎn)類。其中ParagraphProperties是段落屬性,所有有關(guān)段落的格式(例如行間距等)都是段落屬性的子節(jié)點(diǎn)類;Run代表一個(gè)連續(xù)的文本區(qū)域(一個(gè)或幾個(gè)連續(xù)的字符),簡(jiǎn)稱“串”,一個(gè)段落就是由一系列前后相繼的串構(gòu)成的;Hyperlink是超鏈接,其子節(jié)點(diǎn)類通常都是串,在畢業(yè)論文里會(huì)經(jīng)常出現(xiàn)這種從網(wǎng)頁(yè)上直接拷貝過來的、帶有超鏈接標(biāo)記的文字;PermStart是允許編輯區(qū)域開始類,可借此類判斷一個(gè)允許編輯區(qū)域的開始。
RunProperties、Text和Drawing是Run的直接子節(jié)點(diǎn)類。其中RunProperties是串屬性,所有有關(guān)串的格式(例如字體的大?。┒际谴畬傩缘淖庸?jié)點(diǎn)類;Text是串文本,是系統(tǒng)不可以修改的原始資料;Drawing代表圖片,常見類型(jpg、png、bmp或tiff)的圖片摘要信息都內(nèi)嵌在該類中。
TableProperties是Table的直接子節(jié)點(diǎn)類。TableProperties是表格屬性,所有有關(guān)表格的格式(例如邊框的寬度)都是表格屬性的子節(jié)點(diǎn)類。
Header類的直接子節(jié)點(diǎn)類是Paragraph,如果想修改畢業(yè)論文的頁(yè)眉,可以通過修改Header類的子節(jié)點(diǎn)類Paragraph的子節(jié)點(diǎn)類Run來實(shí)現(xiàn)。
Style是Styles的直接子節(jié)點(diǎn)類。Style代表一個(gè)單獨(dú)的樣式,可以是段落類型的樣式,也可以是字符串類型的樣式。所有的樣式都是樣式表的子節(jié)點(diǎn)類。
系統(tǒng)在修訂畢業(yè)論文的過程中,就是通過這樣一個(gè)架構(gòu)體系由頂?shù)降字鸩缴钊氲蕉螌傩浴⒋畬傩?、表屬性上,然后用指定的樣式替換其子節(jié)點(diǎn)類。
4 軟件系統(tǒng)結(jié)構(gòu)
系統(tǒng)總體分為三個(gè)模塊,分別是合法性檢查及初始化模塊、樣式核查模塊和文檔格式化模塊,三個(gè)模塊按序執(zhí)行,如圖3。
“合法性檢查及初始化模塊”首先檢查學(xué)生是否使用了規(guī)定的模板,檢查通過后開始創(chuàng)建各層級(jí)類的實(shí)例。
“樣式核查模塊”對(duì)系統(tǒng)所引用到的每一個(gè)樣式進(jìn)行完整性驗(yàn)證。畢業(yè)論文模板在定制的過程中對(duì)Word的很多已有樣式進(jìn)行了重新編輯,比如“標(biāo)題1”~“標(biāo)題3”樣式、“目錄”樣式、“三線表”樣式等,這些樣式一經(jīng)設(shè)定是不允許學(xué)生再修改的。由于每一個(gè)樣式都有一個(gè)Rsid(重新修訂ID),只要樣式發(fā)生了變動(dòng)其值就會(huì)被Word重新改寫,所以系統(tǒng)通過對(duì)樣式Rsid的核查來獲知是否一個(gè)樣式被人為改動(dòng)過。
“文檔格式化模塊”是系統(tǒng)的核心,其基本思想是順序讀取Body的每一個(gè)直接子類,只對(duì)其中的段落Paragraph、表格Table和結(jié)構(gòu)體SdtBlock三個(gè)類做相應(yīng)的處理。處理時(shí)要根據(jù)當(dāng)前的處理階段將三個(gè)類分別交給相應(yīng)的階段處理程序去操作。畢業(yè)論文的處理按序分為封面、中英文摘要、正文、參考文獻(xiàn)、謝辭和附錄共6個(gè)階段,初始化階段是“封面”。
正文處理階段既包含段落也包含表格(圖片因?yàn)閮?nèi)嵌在串Run中,屬于更底層的操作,此處不再贅述),以下僅對(duì)正文中的段落處理過程做一個(gè)說明,如圖4。
在正文處理階段,當(dāng)系統(tǒng)讀取到一個(gè)段落后,首先需要利用正則表達(dá)式判斷它是否特殊段落,比如一、二、三級(jí)標(biāo)題或者是表題、圖題。如果是的話則對(duì)其應(yīng)用指定的樣式;如果不是特殊段落,則需要判斷它是否階段分界點(diǎn)。每個(gè)處理階段都有標(biāo)志性的標(biāo)題作為分界點(diǎn),這些標(biāo)題都以單獨(dú)的段落形式存在(例如正文部分是以“1 緒論”這個(gè)標(biāo)題開始),且屬于不可編輯內(nèi)容,所以可以對(duì)其進(jìn)行字符串完全匹配,以明確當(dāng)前是否進(jìn)入了新的處理階段。當(dāng)一個(gè)段落既不是特殊段落,又不是階段分界點(diǎn),則它只可能是正文的普通段落,對(duì)其應(yīng)用正文段落樣式即可。
按照“本科生畢業(yè)論文格式撰寫規(guī)范”的要求,正文部分的一級(jí)、二級(jí)和三級(jí)標(biāo)題有嚴(yán)格的內(nèi)容和格式方面的要求。例如,二級(jí)標(biāo)題的內(nèi)容要求為:必須是“x.y 標(biāo)題”的形式,其中“x”“y”代表序數(shù),序數(shù)之間必須使用半角句號(hào),序數(shù)后空一格接寫標(biāo)題,完整的二級(jí)標(biāo)題形如“4.1 功能設(shè)計(jì)”。學(xué)生在撰寫正文標(biāo)題的過程中只需要遵循內(nèi)容要求,而格式要求由系統(tǒng)來實(shí)現(xiàn)。為此,系統(tǒng)需要使用正則表達(dá)式的方式判斷一個(gè)段落是否是二級(jí)標(biāo)題,其正則表達(dá)式的寫法(C#規(guī)范)為“@"^\d+\.\d+\s\w.*"”,相應(yīng)的解釋為:從段落的開始處“^”首先匹配一個(gè)或多個(gè)數(shù)字字符“\d+”,數(shù)字字符之后緊接著一個(gè)英文句號(hào)“\.”,英文句號(hào)之后緊接著是一個(gè)或多個(gè)數(shù)字字符“\d+”,其后必須是一個(gè)空格“\s”,空格之后必須至少有一個(gè)英文、數(shù)字或中文字符“\w”,其后可以是零個(gè)或多個(gè)任意字符“.*”。
5 結(jié)束語(yǔ)
系統(tǒng)已在寧夏大學(xué)信息學(xué)院網(wǎng)絡(luò)工程系2021屆畢業(yè)生的論文撰寫過程中進(jìn)行了初步試用,獲得了積極的認(rèn)可并積累了許多寶貴的意見。經(jīng)版本升級(jí)后,下一步準(zhǔn)備在全學(xué)院2022屆畢業(yè)生中全面推廣,并為今后推廣到全校做好前期準(zhǔn)備。
參考文獻(xiàn):
[1] 賴曉晨,姜瑞勛,于紅,等.學(xué)位論文格式自動(dòng)檢查方法研究與實(shí)現(xiàn)[J].教育現(xiàn)代化,2019,6(57):289-292.
[2] Microsoft.About the Open XML SDK 2.5 for Office[EB/OL].(2021-09-17)[2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/about-the-open-xml-sdk.
[3] Microsoft.How to: Manipulate Office Open XML Formats Documents[EB/OL].(2014-07-09) [2021-11-24].https://docs.microsoft.com/zh-cn/previous-versions/office/developer/office-2007/aa982683(v=office.12).
[4] Microsoft.What's new in the Open XML SDK 2.5 for Office[EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/what-s-new-in-the-open-xml-sdk.
[5] Microsoft.Working with WordprocessingML documents (Open XML SDK) [EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/working-with-wordprocessingml-documents.
[6] Microsoft.C#語(yǔ)言介紹[EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/.
[7] Microsoft.Structure of a WordprocessingML document (Open XML SDK) [EB/OL].(2021-09-17) [2021-11-24].https://docs.microsoft.com/en-us/office/open-xml/structure-of-a-wordprocessingml-document.
【通聯(lián)編輯:謝媛媛】