【CNB】论文赶工?CNB+LaTeX助你八臂之力
本文最后更新于:2025年6月29日 下午
前言
word这一块
大家平时写文章一般用的都是word,但是对于我们这种程序派的来说,word这样简单傻瓜的需求还是不能满足,要精通word太难了,一片4万字的文章,七八十张图表,要自己设置标注,设置格式,设置编号,弹出来的页面窗口七七八八,功能多到对它的开发不足5%,再加上一个不小心改了某个段落的格式,还有可能整篇文章就散架了。改一版,发一版,发来发去你一个字体我一个字体,你一个文件我20个文件,硬盘不够整。合并所有人的文章的时候,直接复制粘贴还可能丢格式,格式刷刷来刷去,手都得抽筋了。
word虽然简单傻瓜,但是面对复杂公式、复杂排版,或者我想对全文精确控制、全局掌控的话,word这块就略显不足,你不能全选文章一次性更改,即便设置了模板,从网上或者其他人的文章里面复制过来照样会把模板污染了。
再加上一个世纪难题,数学公式的排版。考考你,word里面怎么打出求和符号,怎么用word打出下面这个公式
$ \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. $
再继续考你,这个公式如何用qq发给你的朋友,在不使用word保存文件的前提下。当然你可以选择图片,但是公式错了他没法编辑。即使你发了word给他,他粘贴过来万一变成图片了,文章散架了,甚至把一些莫名其妙的标签搞过来,文章废了,这就得不偿失了。虽然概率很小,但是在大学期间我见过无数这样的例子,并不是说不会用word,而是调整很麻烦,操作界面功能复杂,要设置一个东西,需要点开数百个窗口去设置,还要针对不同文本进行不同设置,非常复杂。
有没有一种可能,可以以写代码的形式,类似html那样,先把排版大概的样式写了,至于排版长什么样,让计算机自己去渲染,因此,下文用命令的方式写文章,真是个伟大的发明
写文章就像写代码
markdown
对于程序员来说,markdown绝对是最广为人知的一种用命令排版文章的格式了,开源项目的readme、各种文章编辑器都看得到markdown的身影。来见见腾讯云社区的编辑器
以及各大开源平台自己的markdown渲染
它是一种轻量型的标记语言,类似html那样,通过一些标签就能对你的文章进行定义,比如#是标题、##是二级标题、是代码块、**是加粗,所有的这些命令都能够在你的键盘上找到,而且熟练之后打下这些标记非常方便。
再加上它是以纯文本的方式存储的,分享非常方便,迁移文章的时候只需要把.md文件内容全部复制,引用的图片一并打包即可,也正是这一特性非常适合git进行版本管理。而word是二进制,git并不一定知道两个文件直接diff了什么,你发我我发他一次次循环就会堆积一大片.docx文件,非常难受。
但是markdown仍然还是跟html一个性质的,复杂排版写起来仍然需要更多定义,比如颜色,你会发现大部分编辑器都没这个功能,有了也不一定渲染得出来,正是因为不支持。
再来,上文提到的公式,在支持LaTeX的markdown里面就非常简单,而且还可以复制粘贴给你的朋友,不用担心复制过去乱了,带底色了,字大了甚至变图片了。
1 |
|
LaTeX
理工科的小伙伴可能比较熟悉,国外很多文献,例如arxiv这种平台,都是只接收LaTeX(大写L小写a大写T小写e大写X)这种格式的。latex的前身是TeX,广泛用于生成高质量的科技和数学文档,由美国计算机科学家Leslie Lamport在 20 世纪 80 年代开发。TeX由Donald Knuth开发的底层排版引擎,主要用于处理复杂的数学公式和高质量的排版。
而对于超长文章来说,LaTeX可以实现全局控制,比如正文统一16pt字号,标题统一以「第x章 一级标题」、「x.y.z 三级标题」等的格式统一控制,而且只需要写命令就能控制,复制粘贴,甚至交给AI修改都非常方便。
当然,不是所有文章都适合LaTeX,没有公式或者内容不复杂、模板不容易乱的文章,单独配置很复杂,有这个时间去调一下word或许更快
适合用latex的可以参考下文:
- 需要插入复杂数学公式和参考文献的文档。
- 精确调节和自动处理排版细节,生成符合国际出版标准的文档格式。
- 超大型文档(如书籍、论文、技术手册),LaTeX能够自动生成目录、索引、参考文献,并支持交叉引用和自动编号。
- 数学、物理、工程学等领域的文章写作
- (我自己加的)利用git特性进行版本管理的,用纯文本方式分享和批阅的文章
听起来高大上,但是和markdown没有什么区别,不吓唬大家了,下面就是一个latex写的简单文章:
如何选择
如果LaTeX满足你写文章排版的需求,那就继续往下看;如果不需要,也可以学习一下,以后露一手也不亏。
LaTeX语法并不复杂,跟markdown类似,只不过换成了一些英文单词,H1~H3是\section
,\subsection
,\subsubsection
,图片和表格比较复杂,但是有很多工具可以实现转换,下文会提到。
环境安装
这里推荐TeXLive部署,但是再怎么推荐,最好的办法是使用CNB,所以就不过多展开,毕竟他们官网学术味太浓了,很难有看下去的欲望。简单来说就是下载安装包,安装,过程因为网络导致特别久,要支持中文和常见文章,至少需要10个GB的空间,
常用语法
既然都到这里了,如果大家没接触过latex的话可以学习一下常见的语法
\section
,\subsection
,\subsubsection
:一级到三级标题\textbf{}
加粗的内容\centering 居中的内容
\ref{}
引用某个label(如表x,图x)\begin{实现的命令}
begin
这里,需要展开讲一讲
这里主要实现一些命令,比如项目分点,表格,图片等等
1 |
|
效果如下
由于篇幅限制,这里不展开太多关于LaTeX的知识。
CNB
往期文章提到了很多CNB。CNB基于Docker生态,对环境、缓存、插件进行抽象,通过声明式的语法,帮助开发者以更酷的方式构建软件。
通俗来说,它是个简单的云服务器,这台服务器运行在容器里,配置什么的需要你自己定义,运行结束后就销毁。
这样的特性适合我们要做的事情,因为latex环境大小太恐怖了。
开始使用
有请
https://cnb.cool/arsrna/cnb-latex/
直接进入项目,fork到自己的仓库下。我已经安装了全部texlive包,以及常用中文字体,可以通过fc-list
查询。常用的推荐SIMSUN
,kaiti_GB2312
宋体和黑体。
点击右上角云原生开发,趁你不注意进到了第二页,点击webide就来到熟悉的界面
这里不需要操作什么,接下来要做的,就是开始写作
开始写作
这里推荐新建一个文件夹专门存放写作的内容,方便打包下载到本地,以及产生缓存的清理。
把文章基本框架写进去
点击右上角的运行按钮,等待一会可以看到在目录下就出现了一个pdf,这个就是latex输出的文章
为了方便,可以把pdf拖动到屏幕右侧,实现边写latex边预览
文章写完后,使用git功能,把tex编辑的内容commit+push,就可以保存到cnb上了,下次再使用同样的方法进入,找到那个文件接着编译即可。
也可以使用tar命令,打包文件下载到本地接着写作。
教程就到这里,很简单
配置
.cnb.yml
这是CNB变NB的核心文件
在这里,使用了我打包的texlive环境,配置了16核心32G的机器,可以参考项目目录下Dockerfile
注意,构建一次非常耗时间,所以我把构建方式改为web按钮构建(上图未更新),防止浪费账号资源。
你也可以定制构建环境,在Dockerfile里面都有,手动点击构建按钮,然后更换.cnb.yml
的docker镜像地址为自己制品库的即可。
webide
在.vscode/settings.json
里面对设置做了介绍,我也对texlive做了设置,适配了XeTeX中文环境,更多的可以参考文件内注释。
已知问题
文章加载卡
这个是网络问题,卡的时候什么都动不了,千万不要刷新,等到webide加载完毕后保存再刷新,否则没有保存的内容就丢了,或者关闭自动更新。
字体报错
检查导言设置的CJKmainfont,必须是系统已经安装的字体,通过fc-list
就可以查询,安装的方法参考Dockerfile