基于LaTeX的高校毕业论文在线自动编排系统的设计与实现
2023-01-31孙祥辉孙道强
孙祥辉 杨 雨 孙道强
(平顶山学院计算机学院 河南 平顶山 467000)
0 引 言
撰写毕业论文是高校学生完成学业的重要环节,我国高校毕业论文有规定的格式及要求,虽然使用一般的编辑排版软件也能够完成,但是都相当麻烦、耗时。如使用文档编辑排版软件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知识甚至零基础的情况下使用该系统轻松完成毕业论文的编辑排版工作,将主要注意力投入到论文内容质量提升上去,撰写出更高质量的毕业论文。
1 项目概述
1.1 开发环境
项目运行环境采用Tex的发行版MikTex,在Windows系统下使用命令XeLaTeX和BibTex编译Tex源文件及参考文献生成PDF文件。使用安全性和稳定性都比较好的Java语言作为开发语言,同时使用轻便的开源数据库MySQL进行数据存储和管理,用Chrome浏览器或360浏览器极速模式进行生成PDF文件的在线预览。整个开发平台采用开源软件Eclipse进行搭建与实现。
1.2 主要开发工具及技术
(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软件的关键技术。
2 总体框架及特色
2.1 系统的体系结构
细思(Thesis)论文在线编排系统后台使用的是SSH架构搭建的服务器,前端是基于MVC的设计思想,采用MySQL数据库存储用户论文信息。前端和后台之间利用请求响应修改数据进而修改论文的Tex源文件,实现了数据的动态更新。使用JAVA语言开发Web项目,用户无须搭建LaTeX运行环境即可实现在线编辑和排版论文,其编译运行的流程如图1所示。
图1 系统流程
2.2 系统模块划分和特色
为了实现系统层次分明,减少耦合,系统总体划分为三部分:文件管理模块、LaTeX引擎宏封装模块、数据编辑模块。
(1) 文件管理模块:创建、修改论文的Tex源文件以及呈列生成的文件。在编译论文的Tex源文件之前,该模块获取论文信息创建或者修改Tex源文件,待系统编译完成后该模块清除多余编译文件,呈列出生成的论文文件以便下载。
(2) LaTeX引擎封装宏包模块:用于实现对LaTeX功能模块的宏封装,快速创建LaTeX的图、表、引用等功能代码,简化LaTeX语言的使用。
(3) 数据编辑模块:通过Web页面实现对论文各个模块信息的修改与添加,结合LaTeX排版系统格式与内容分离的特性实现模块的修改不影响其他模块的排版效果。
按照功能将系统的模块进行划分,如图2所示。
图2 系统功能模块划分
2.3 数据库的设计
以论文的不同模块划分实体,所有实体通过user_id外键与当前用户绑定,通过用户id可将该用户的一篇论文的所有模块组合起来形成一篇完整的论文,表与表之间相互独立且被唯一主键标识符合数据库表设计第三范式,保证了数据的低冗余,消除了表之间的传递依赖,系统的E-R图如图3所示。
图3 系统E-R图
对应于系统的功能模块划分,数据库共设计了9张表。每个表的详细信息见表1。
表1 数据库表信息
续表1
3 关键技术的设计及实现
3.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 插入表格
3.2 系统编译和及时编译功能
由于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 及时编译(右部分)
3.3 参考文献的编排
使用ibitem[显示符号]{引用标签}可简单实现LaTeX的参考文献引用,但不能保证参考文献的引用顺序与最终的参考文献列表顺序一致。本系统通过建立BibTex数据库的方式来实现灵活的文献引用,格式使用国标GB/TB7714-2005《文后参考文献著录规则》所对应的bst文件(当然也可以是自定义文献格式)确保学位论文里参考文献符合国家规范。
系统提供BibTex文献格式的输入表单,如图9所示,表单包括引用标识、文献显示名(便于使用者区别不同的参考文献)、文献内容(即BibTex格式的引用文献整体)三部分构建一个可识别的BibTex格式的引用文献,其中文献内容需用户在CNKI知网、百度学术、谷歌学术等网站输入文献的名字后复制出BibTex格式的参考文献填入,然后修改BibTex格式的引用文献整体的第一个字段为英文字母加年份后作为该参考文献的引用标识两个地方务必完全一致。上述三项输入提交后就会向参考文献bib库添加一条记录。该文献被引用后系统将在源文件编译时展示被引用的参考文献。
图9 参考文献的添加
3.4 其他关键技术
(1) 论文题目的智能切分换行。由于每个用户的论文题目长度是不定的,需要封面论文题目根据封面设定的下划线长度进行自动的判断换行。本系统通过接收用户输入的论文题目字符串,遍历判断每一个字符的大小,长度到达7.5 cm(即设定的长度)添加绘制一个长度为7.5 cm的下划线的LaTeX代码命令,并填写该段的分割字符串,参照国家标准和学位论文规范,论文题目超出三行提示论文题目过长,令用户精简后重新输入。
(2) 在线预览PDF文件。用户既可以在撰写时对单个章节进行编译并进行快速预览,也可在论文完成后对整体进行编译预览,细思(Thesis)论文在线编排系统使用开源插件PDFObject实现论文在线预览与章节的单独预览,通过在线预览方式让用户查看当前论文的排版效果,省去下载后才能查看文件的麻烦。使用PDFObject的动态绑定组件的功能在Web页面中的某一组件内动态展示当前的PDF论文文件。
4 系统的实现及应用
4.1 系统主要功能的实现
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 论文生成与文件下载
4.2 系统的应用
细思(Thesis)论文在线编排系统在河南某高校2020届毕业生部分院系进行了推广使用,通过对师生进行简单的系统使用培训,大都迅速地掌握了使用方法,很快就完成了论文的编辑和排版工作,生成了格式规范的毕业设计(论文),达到了学校的要求。通过对运行中师生的反馈意见进行了完善和修改,最终该系统被该校选定为全校的毕业论文(设计)排版系统,后续将与该校的毕业设计(论文)管理系统实现无缝对接,将课题申报、学生选题管理、过程管理(包含任务书下发、开题、过程指导记录,中期检查、中间版的存档)、论文库检索、论文评阅、查重检测、论文推优等模块有机融合,从而为高校毕业生提供适用、便捷的毕业论文编辑排版工具。
5 结 语
本文基于LaTeX排版技术,采用B/S架构与MVC设计模式,利用Web程序收集用户论文数据,通过编写并实现自定义的LaTeX模板引擎宏替换编辑器对用户数据封装形成LaTeX语言文本,通过CommandExec调用LaTeX编译引擎命令生成符合各高校规范的毕业论文,该系统提供源文件和生成文件一键下载,对后期的修改编辑和功能扩展提供非常友好的支持。该系统可令师生以更多的精力投入到科学问题的解决之中,而无须考虑排版问题,也不用记忆复杂的LaTeX排版命令,就可以轻松地实现规范的论文排版,为高质量完成毕业论文提供强有力的辅助工具。