秦建軍,王智勇,劉雯晶,柳戌昊,魯騫陽
(四川省科學技術信息研究所,四川 成都 610011)
科技報告是科技人員為了描述其從事科研、設計、工程、試驗和鑒定等活動的過程、進展和結果,按照規定格式編寫而成的具有重要參考利用價值的特殊文獻[1]。“科技報告編寫規則”對科技報告的構成、編排格式及技術內容提出了統一要求,是規范科技報告質量管理的核心標準之一[2]。我國于2013年啟動了科技報告工作[3];為使科技報告編寫正規化、規范化,2014年我國修訂完善了科技報告標準。廣大科研人員基本都能遵循最新版《科技報告編寫規則》(GB/T 7713.3-2014)[4]編寫科技報告。
在長期的科技報告審核工作中發現,廣大科研人員的科技報告質量逐年提升,內容詳實,但格式排版仍舊是一大痛點,審核人員后期花費了大量時間處理科技報告的格式排版。為解決這一難題,減輕簡單重復的工作量,進一步提高審核效率,發揮信息技術的優勢結合計算機技術,研發了一款科技報告應用軟件。
《科技報告編寫規則》規定,報告正文為5號宋體、1.5倍行距;各級目錄標題為5號黑體、1.5倍行距;圖下方的圖題注、表上方的表題注均為5號黑體、1.5倍行距;圖和表的注釋為小5號宋體;表中文字為小5號宋體。目前,科研人員提交的科技報告內容具體充實,但排版格式沒有遵循這些規則,不利于科技報告的標準化和規范化。
從技術角度看,科技報告的Word內容,由大綱目錄、正文文字、圖形、表格、頁眉頁腳等主要元素組成。需要處理格式的主要元素如圖1所示。

圖1 科技報告排版主要元素
1)處理節。Word文檔主要由節(section)和段落(paragraph)組成,一個“分節符(下一頁)”為一節,每一節的頁腳和頁眉可以不同。科技報告的“目錄”“插圖清單”“附表清單”與后面的正文內容之間需要添加“分節符(下一頁)”,正文內容與“承諾書”之間也需要添加分節符(下一頁)。通過循環不同節添加頁碼并設置不同的頁碼格式,同時刪除“承諾書”的頁碼。
2)處理段落。段落包含了目錄大綱段落、純文字段落、圖文混排段落、圖形、表格數據等。通過循環每一段落,判斷哪些段落是大綱、普通文字、圖文混排、圖形和表格數據,判斷時排除圖形段落和表格數據,后期單獨處理。普通文字、圖文混排段落用5號宋體、1.5倍行間距、首行縮進2個字符。
3)處理圖題注和表題注。圖題注和表題注本質上仍是段落,但在科技報告中,圖題注和表題注用5號黑體,需要單獨識別,識別原則是段落起始字符是“圖”或“表”,緊接著是阿拉伯數字序號,并且段落最后一個字符不能是阿拉伯數字,這是為了與“插圖清單”“附表清單”中的文字區分開來,“插圖清單”“附表清單”中的文字用5號宋體,其中每一段落后面是頁碼(阿拉伯數字)。個別段落可能符合圖題注和表題注的特征,但不是真實的圖題注和表題注,程序可能會錯誤格式化,但總體上不會受影響,個別情況須人工干預。
4)處理圖形和表格。圖形和表格本質上仍是段落,大部分圖形是單獨的段落,個別圖片置于文字中混排。單獨的圖片易于處理,圖文混排則需要判斷圖片高度,通常混排中的圖片高度不會太高。
表格中每一單元格的數據都是一個段落,Word中可以統一設置表格的格式,而無需設置每一單元格的格式。行高和列寬根據內容自適應,不用單獨設置,不用考慮跨行和跨列。
Word處理耗費計算機資源,一篇科技報告至少有數頁內容,如果把Word排版功能放在服務器上執行,會嚴重降低服務器運行效率,影響用戶體驗。因此,優先考慮基于單機版開發科技報告格式化處理軟件。
開發語言采用Python,Python語言具有簡潔性、易讀性以及可擴展性,Python的擴展庫相當豐富。處理Word的接口庫Win32com功能強大,完全滿足科技報告排版功能的要求;單機版用戶UI采用Tkinter的GUI工具包,方便用戶操作。
安裝Anaconda3.7,Anaconda是開源的Python解釋器,其包含了Conda、Python等180多個科學包及其依賴項;安裝win32com和Tkinter工具包;程序代碼打包成可執行文件(exe)需要安裝Pyinstaller。
1)樣式設置。程序在格式化處理時,先修改Word樣式庫中的正文樣式:5號宋體、1.5倍行距、首行縮進2個字符。正文樣式必須放在所有樣式最前面其他樣式才有效。然后依次增加樣式:科技報告圖片、科技報告表格數據、圖題注、表題注、標題1至標題7、清單名稱。添加樣式后打開Word時樣式庫可見。每一種樣式遵循科技報告規范,后面處理段落時根據段落類型使用相應的樣式,做到統一規范。實現代碼樣例如下。
imgStyle=False#圖片
for i in range(1,doc.Styles.Count):#判斷doc中存在樣式
if doc.Styles(i).NameLocal==“科技報告圖片”:
imgStyle=True
if imgStyle==False:
doc.Styles.Add(“科技報告圖片”)
doc.Styles(“科技報告圖片”).ParagraphFormat.TabStops.ClearAll()
doc.Styles(“科技報告圖片”).ParagraphFormat.LeftIndent=0 #左縮
doc.Styles(“科技報告圖片”).ParagraphFormat.FirstLineIndent=0 #首行縮進
doc.Styles(“科技報告圖片”).ParagraphFormat.CharacterUnitLeftIndent=0
doc.Styles(“科技報告圖片”).ParagraphFormat.CharacterUnitFirstLineIndent=0 # 首行縮進
doc.Styles(“科技報告圖片”).ParagraphFormat.Alignment=1 #012左中右
doc.Styles(“科技報告圖片”).ParagraphFormat.Space15() #行間距1.5倍
doc.Styles(“科技報告圖片”).ParagraphFormat.DisableLineHeightGrid=True # 段落中的字符與行網格對齊
doc.Styles(“科技報告圖片”).ParagraphFormat.SpaceBefore=0
doc.Styles(“科技報告圖片”).ParagraphFormat.SpaceAfter=0
doc.Styles(“科技報告圖片”).ParagraphFormat.AutoAdjustRightIndent=False
doc.Styles(“科技報告圖片”).ParagraphFormat.LineUnitBefore=0
doc.Styles(“科技報告圖片”).ParagraphFormat.LineUnitAfter=0
doc.Styles(“科技報告圖片”).ParagraphFormat.MirrorIndents=False

圖2 程序實現總體邏輯
2)段落處理。循環所有段落,排除表格數據,剔除段落中的空格,再分別判斷處理。①根據OutlineLevel判斷段是否是大綱目錄,如果是大綱目錄則根據標題的層級使用標題樣式(標題1~標題7)。大綱目錄使用Word內置模板——多級列表第5種模板。部分科技報告是作者手工添加的目錄層級,這種目錄并沒有出現在大綱列表中,軟件會自動識別,生成Word大綱目錄。②普通正文段落則使用正文樣式,圖文混排也須應用正文樣式。③如果段落文字以“表+序號”或“圖+序號”則判斷是否是題注,表題注使用“表題注”樣式,圖題注使用“圖題注”樣式。
3)圖片與表格處理。①循環所有圖片(InlineShapes),排除圖文混排段落,再應用“科技報告圖片”樣式。②循環所有表格,再應用“科技報告表格數據”樣式。
4)更新目錄。科技報告中有大綱目錄(TablesOfContents)、插圖清單(TablesOfFigures)和附表清單(TablesOfFigures)3種目錄,程序更新目錄內容和頁碼,并設置字體、字號、行間距和懸掛2字符。
5)頁眉頁腳處理。①循環所有節(section),刪除頁眉。②循環所有節(section),設置頁腳中的頁碼樣式。
6)合并承諾書。部分科技報告沒有承諾書,需要軟件自動合并一個承諾書,并刪除頁碼信息。
運用Pyinstaller工具打包,生成一個可執行文件。打包代碼:pyinstaller.exe--onefile--windowed 科技報告.py-p D:ProgramDataAnaconda3,運行后,在dist目錄生成文件“科技報告.exe”。運行程序如圖3所示。

圖3 軟件運行圖
格式化10頁以內的科技報告需要2~3 min,圖片和表格少的科技報告可能2 min以內完成格式化;格式化100多頁的科技報告可能需要30多分鐘。當然,軟件運行效率與電腦的配置密切相關。軟件排版后的科技報告,再由人工處理,與傳統的人工處理方式相比,節省大概一半的時間。
本軟件還有不足之處,表現在:①大綱目錄自動化生成后,保留了原文檔作者手工編寫的目錄序號,雖方便審核人員對照,但需要人工刪除序號。②圖題注和表題注識別可能存在個別錯誤,需要人工干預。
軟件采用循環段落的方式,無法考慮上下文關聯,降低了需要格式化內容的識別率,如果能把所有段落放在一個大數組中,再循環數組,判別前后文關聯關系,就能提高識別率,但此方法大大增加了電腦負荷,降低運行效率,期待更佳方案。