LaTeX 里「添加程序代码」的完美解决方案
坑边闲话:如何在 Word 里添加代码片段呢?这个可以通过 VBA 编程实现,加上某些可以导出 HTML 格式的源码编辑器,基本无缝操作。但是 Word 插入代码并自动更新,真的是让人非常恼火,写完这篇文章,我再回看 Word 中插入代码,简直是地狱般的操作,虽然小代码量不难,也能借助某些操作能做得很好,但是终究不够优雅。那么,$\LaTeX$ 能做到吗?如果能的话,如何在 $\LaTeX$ 里面添加源代码并完美呈现呢?
- 知乎原文
- Status: 已搬运,待校对
1. 为什么需要在 $\LaTeX$ 里面添加源码·
有很多时候,我们需要让自己的源代码作为附录写在文章里,比如你的学位论文,再比如你的实验报告。这些时候你单纯写结论上去不是很合适,别人没有你的代码是很难评价你的实验真实性的。
所以源代码必须要有。
1.1 最终 PDF 里面的源代码应该是什么样子的呢·
我个人认为,应该至少满足如下效果:
- 代码高亮,而且高亮的颜色可以自己设置;
- 代码要使用等宽字体;
- 字间距也要跟编辑器里的完全一致,我添加几个空格,你就呈现几个空格,自动调节字间距的行为坚决不允许;
- 可以支持 include 导入源代码。
关于 1~3 很好解释,那就是我们要求 PDF 里的代码片段看起来和公式编辑器里的一模一样。第 4 条可能有人不理解,我在这里解释一下。如果你的论文已经写好,只差粘贴代码进去就搞定,那么你绝对不需要第四条;但是,一旦你觉得有个地方不太对,那你需要在源码里修改,然后再把修改过来的黏贴进来,这就很难受了!你需要找到对应的修改地方,而且手工很难保证自己 $\LaTeX$ 里的代码和工程里的代码完全一致!
2. 终极解决方案·
这里我们采用时下比较火热的 Python 进行演示。
$\LaTeX$ 有个叫做listings
的宏包专门解决代码展示问题!用了这个库之后,你的代码至少可以做到如图 1 所示的样子。
在这里要想到到上面的效果,需要这种命令:
1 | \usepackage{listings} |
只要把上面的这一段代码,粘贴到你的 $\LaTeX$ 导言区域就可以了,当前,前提是你安装了 listings
库,如果没有,请参见我的另一篇文章:如何安装 TeXLive 2020.
现在我来解释一下上面的代码做了些什么。
\usepackage{listings}
不用多说,就是简单地引用库;\lstset
是对库进行设置,主要是设置某些关键的地方,它含有很多字段;\lstdefinestyle{Python}
是新定义一个叫做 Python 的样式,到时候直接引用这个设置就可以;\lstset
和\lstdefinestyle{Python}
的东西差不多,不同之处就是优先级不同,后者更高,前者是在你没有在 Python 中进行相关设定的时候,为你自动设置的一些东西。总而言之,Python 样式里有的,一定会在 Python 代码里忠实被执行;Python 样式里没有的,系统会检查\lstset
里有没有相关设置,如果有就用,没有的话就用系统的默认设置。- 其他字符自己看注释
那我如何使用这些设定呢?看代码
1 | \lstinputlisting[ |
{../src/duke/ff.py}
是我源代码在本系统中相对于 TeX 文件的位置;style
选择之前定义过的 Python,label
是一个可引用的标签,以后可以使用ref{ff.py}
关键字引用这段代码,caption
是我要在这个代码上面显示的表头,告诉大家这个代码有关什么东西,\bf
是加粗,没什么其他意思。
再上一个图,看一下长代码行换行。
结束语·
到这里就结束了,如果你还想知道如何设置 C++、Java 等代码的风格,可以关注我的专栏「修辞与编程」,我会在后期提供方案。如果这篇文章帮助到了你,请点赞支持我,感谢!