使用Prism高亮代码

在写作业报告的时候,可能会要粘贴一些代码到WORD文档/PPT中。通常结果会是下面这样的,显然,这样非常不好看,而且拼写检查会让你的word文档充满了错误提示。

代码粘贴到word效果图 代码粘贴到slide效果图

这样纯文本格式的粘贴与复制,是展示非友好的。所以,一般有两种方式可以选择。

  • 将编辑器的代码截图,以图片的形式嵌入word/ppt中
  • 以HTML格式或者RTF格式粘贴进word/ppt中

这两种方式都可以很好的保留原有的代码高亮及格式,但有利就有不便,它们都有自己的缺陷。
以图片方式粘贴,也许是最能保留你的编辑器高亮风格的方式,但问题是你不能再编辑。如果你插入word中,突然发现某段代码有问题,你就很难直接修改,必须回到编辑器中修改后重新截图。假如你的源代码已经不在了,你要是想修改,必须手敲一遍图片里的代码。
以HTML/RTF格式粘贴,不存在上面的问题,可以直接编辑。但问题是,你的编辑器得支持这种方式的粘贴。

好在,各种编辑器一般都有这种插件。比如notepad++上的NppExport插件,Sublime上的sublimehighlight。各大IDE如VS、Eclipse、JetBrains等,可以直接保留高亮进行复制或有相应插件,所以,这不是什么问题。

然而,有的时候事情却不是那么简单。
我的电脑上并没有重型的IDE,怎么办?插件导出的高亮风格不好看怎么办?

比如我的sublime的高亮风格是这样的,很好看

sublime高亮风格

然而使用sublimehighlight插件以HTML格式复制,粘贴到word中却是这样的

导出的高亮风格

这是什么玩意?怎么这么丑…我的超好看的字体怎么不见了?

所以说,事情往往没有想象中的那么美好。好在,知道如何解决问题————以HTML方式复制代码,那事情就简单了一半。

剩下的一半就是选择解决的方法了。
比如,可以自己写一个编辑器的插件。 😂 可是这样不就回到上面的问题了吗?比我牛逼几个数量级的人都已经把插件写好了,但那并不是我想要的啊。
那只能写简单的脚本了。既然想自己完成语法高亮,那《编译原理》肯定得学好,不然怎么搞那些个词法分析、语法分析啊。然而《编译原理》学的并不好 😱

所以显然不能自己做了!好在网上有很多开源库来解决这个问题。而且,也有很多的库专门解决语法高亮的问题。比如Prism.js。Prism确实不错,好多的大网站都在用,而且很轻量级,代码开源,免费使用。

不过,还是有一个问题,那就是Prism里代码的高亮,是通过标签的class来定义的。定义在Prism.css里。然而,在这种情况下以html格式复制,是没有css的。也就是说,以HTML格式复制,只能复制元素的内联样式,而不能复制外部样式或者在head里定义的样式。

所以,我们需要对Prism.js的源代码进行一些改造。

改造并不难,只需要将原来对元素的class操作的地方修改为对style进行修改。这个操作在Token.stringify()方法里。同时,由于不能复制外部样式,所以需要将样式修改为js变量,然后以内联格式插入到元素的style中。

修改后的demo,可以参考这里使用Prism高亮代码

使用的结果就是这样。

直接点击高亮和复制就ok了。

下面是效果图。确实很不错。

效果图

对了,这里还说一下如何在word中插入代码而不会有spellcheck。

工具栏 -> 插入 -> 对象 -> OpenDocument Text
粘贴进去后,保存,关闭即可

PS:word真的好牛逼,都可以做动画,然而我连排版都不会。 😭

坚持原创技术分享,您的支持将鼓励我继续创作!