![40561319ea68834ffb663b97e7d0103b.png](https://i-blog.csdnimg.cn/blog_migrate/2bd9dc21201dccef95d05a35ebe5bd9d.jpeg)
坑边闲话:如何在 Word 里添加代码片段呢?这个可以通过 VBA 编程实现,加上某些可以导出 HTML 格式的源码编辑器,基本无缝操作。但是 Word 插入代码并自动更新,真的是让人非常恼火,写完这篇文章,我再回看 Word 中插入代码,简直是地狱般的操作,虽然小代码量不难,也能借助某些操作能做得很好,但是终究不够优雅。那么,
能做到吗?如果能的话,如何在
里面添加源代码并完美呈现呢?
1. 为什么需要在
有很多时候,我们需要让自己的源代码作为附录写在文章里,比如你的学位论文,再比如你的实验报告。这些时候你单纯写结论上去不是很合适,别人没有你的代码是很难评价你的实验真实性的。
所以源代码必须要有。
1.1 最终PDF里面的源代码应该是什么样子的呢
我个人认为,应该至少满足如下效果:
- 代码高亮,而且高亮的颜色可以自己设置;
- 代码要使用等宽字体;
- 字间距也要跟编辑器里的完全一致,我添加几个空格,你就呈现几个空格,自动调节字间距的行为坚决不允许;
- 可以支持 include 导入源代码。
关于 1~3 很好解释,那就是我们要求 PDF 里的代码片段看起来和公式编辑器里的一模一样。第 4 条可能有人不理解,我在这里解释一下。如果你的论文已经写好,只差粘贴代码进去就搞定,那么你绝对不需要第四条;但是,一旦你觉得有个地方不太对,那你需要在源码里修改,然后再把修改过来的黏贴进来,这就很难受了!你需要找到对应的修改地方,而且手工很难保证自己
2. 终极解决方案
这里我们采用时下比较火热的 Python 进行演示。
listings
的宏包专门解决代码展示问题!用了这个库之后,你的代码至少可以做到如图 1 所示的样子。
![e76e7913814f92924ca179bc5bdd62a7.png](https://i-blog.csdnimg.cn/blog_migrate/7d7a4bf2d65e706be1a18dcd75c9efc8.jpeg)
图 1 最终的效果。字体严格等宽,代码有自动高亮。
在这里要想到到上面的效果,需要这种命令:
usepackage{listings}
usepackage{ctex}
% 用来设置附录中代码的样式
lstset{
basicstyle = sffamily, % 基本代码风格
keywordstyle = bfseries, % 关键字风格
commentstyle = rmfamilyitshape, % 注释的风格,斜体
stringstyle = ttfamily, % 字符串风格
flexiblecolumns, % 别问为什么,加上这个
numbers = left, % 行号的位置在左边
showspaces = false, % 是否显示空格,显示了有点乱,所以不现实了
numberstyle = zihao{-5}ttfamily, % 行号的样式,小五号,tt等宽字体
showstringspaces = false,
captionpos = t, % 这段代码的名字所呈现的位置,t指的是top上面
frame = lrtb, % 显示边框
}
lstdefinestyle{Python}{
language = Python, % 语言选Python
basicstyle = zihao{-5}ttfamily,
numberstyle = zihao{-5}ttfamily,
keywordstyle = color{blue},
keywordstyle = [2] color{teal},
stringstyle = color{magenta},
commentstyle = color{red}ttfamily,
breaklines = true, % 自动换行,建议不要写太长的行
columns = fixed, % 如果不加这一句,字间距就不固定,很丑,必须加
basewidth = 0.5em,
}
只要把上面的这一段代码,粘贴到你的
listings
库,如果没有,请参见我的另一篇文章:如何安装 TeXLive 2020。
现在我来解释一下上面的代码做了些什么。
usepackage{listings}
不用多说,就是简单地引用库;lstset
是对库进行设置,主要是设置某些关键的地方,它含有很多字段;lstdefinestyle{Python}
是新定义一个叫做Python的样式,到时候直接引用这个设置就可以;lstset
和lstdefinestyle{Python}
的东西差不多,不同之处就是优先级不同,后者更高,前者是在你没有在 Python 中进行相关设定的时候,为你自动设置的一些东西。总而言之,Python 样式里有的,一定会在 Python 代码里忠实被执行;Python 样式里没有的,系统会检查lstset
里有没有相关设置,如果有就用,没有的话就用系统的默认设置。- 其他字符自己看注释
那我如何使用这些设定呢?看代码
lstinputlisting[
style = Python,
caption = {bf ff.py},
label = {ff.py}
]{../src/duke/ff.py}
{../src/duke/ff.py}
是我源代码在本系统中相对于TeX文件的位置;style
选择之前定义过的Python,label
是一个可引用的标签,以后可以使用ref{ff.py}
关键字引用这段代码,caption
是我要在这个代码上面显示的表头,告诉大家这个代码有关什么东西,bf
是加粗,没什么其他意思。
再上一个图,看一下长代码行换行。
![2585d63814998367f4c4a416d562a165.png](https://i-blog.csdnimg.cn/blog_migrate/f3aebe52662db117f005797743563492.jpeg)
图 2 长代码换行。
结束语
到这里就结束了,如果你还想知道如何设置 C++、Java 等代码的风格,可以关注我的专栏「修辞与编程」,我会在后期提供方案。如果这篇文章帮助到了你,请点赞支持我,感谢!