如何在Word中排出漂亮的代码

转载地址:http://blog.csdn.net/mangosnow/article/details/34830323


学数学和计算机,当然还是用LaTeX排版技术文章更方便。但有时候还是迫不得已需要用Word写作,另外Word其实也有Word的好处,比如细节上的修改要比LaTeX方便。

       从Matlab高亮代码复制到Word,中文会乱码开始,我就很想研究下如何在Word中展示漂亮的代码。今年寒假利用Vim,有些突破,10月3日的时候又有了比较大的进展,自己设计了一款Vim的代码高亮配色方案,然后利用Vim的:TOhtml命令生成html文件,再用浏览器打开html文件,复制里面的代码到Word,就能保留原始的高亮效果了。

       其实本质就是制作一份html文件,复制到Word时会保留其源格式。很多代码编辑器或者IDE都有提供制作html文件的功能,比如CodeBlocks(File -> Export -> As HTML...)。后来我发现Notepad++才是最方便的工具。然后结合看Oeasy的Word教学视频,对底纹等排版知识有了更深的了解,加上一点VBA的功底,目前能比较高效的进行Word的代码排版工作了。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1  工欲善其事,必先利其器

       我用的是微软OFFICE2013版的Word。2007、2010的操作也差不多。用其它Word版本或WPS的读者自己看着办。
       辅助工具只有一个: Notepad++

2  基本操作

  1. 用Notepad++直接编辑代码文件,注意文件后缀,比如.cpp是C++程序,.m是Matlab,写对后缀表示的文件类型,才有对应的语法高亮效果。
  2. 选中需要的代码块(或者不选,默认对全文操作),使用“插件 -> NppExport”,具体见下图
  3. 然后直接粘贴到Word就行了。
       读者可能要吐槽了:哈?这么简单?那尼玛的说那么多废话干嘛?
       基本操作确实这么简单,不过希望读者能明白其中的道理,“Copy HTML to clipboard”是把当前文本以html格式复制到剪切板,所以再把剪切板的内容复制到Word,就不同于以往的纯文本复制,而是相当于在网页上把一段带有格式的文本复制到Word。这也正是我所说的Notepad++是最方便的工具的原因——Notepad++提供工具,省略了很多中间操作。有兴趣的读者可以试试里面的"Export to HTML",就更能明白我要表达的含义了。
       明白原理干嘛?因为有些读者可能并不喜欢Notepad++的高亮效果,那么只要你用的编辑器也能转换出html文件,那也可以在Word中排出一模一样的效果。这就是授人与鱼不如授人于与渔。

3  更上一层楼: 行号与灰色背景

       很多读者或许并不能满足这种效果。我们看计算机书籍经常会看到代码都有灰色背景,有时候还需要标明行号。
       为了以后从Word把代码复制出来方便,行号和代码在内容上应该分开。故我的处理方法是插入一个 一行两列的表格。第一列写行号,第二列放代码。自己进行一些行号右对齐等的微调后,效果如下:

      
        那灰色背景呢?这个东西专业排版术语叫“底纹”,读者自己百度学习下就会了,很简单。不过注意底纹也有分很多类:文字底纹、段落底纹、单元格底纹、表格底纹。所以往往有人修改底纹,发现没用改不掉,然后就满口骂Word,Word就冤枉的又躺枪了。其实原因很可能是你改了段落底纹,可是那个东西本来是文字底纹。。。

Tips:
  1. 将行号的数字颜色改成背景色就能“隐藏行号”了,需要的时候再调回黑色。
  2. 注意表格线框是可以隐藏的。
  3. 有时候代码排版的比较紧凑,行间距较小会导致下划线"_"没掉了,这时可以试试用“Consolas”字体。
  4. 如果以后需要从Word复制代码,放到表格第二列的左上角,鼠标变成一个黑色箭头时,就能单击全选代码文本进行复制了。行号对源代码不会有任何的干扰。
  5. 注意代码不要过长,长度超过一行时,可能会带来一些不便。
  6. 如果发现空格并没有与字母等宽(如下图所示),则是半全角字符的bug作祟。在“文件 -> 选项 -> 高级”的“布局选项”去掉“区分半角字符和全角字符”的选项即可。                     

4  更加智能与自动化

       从此终于能排出漂亮的代码了。不过......这个操作也太麻烦了吧!我写一个200行的代码还要自己输行号?!
       哈哈,不用担心,你忘了我们的职业是“程序猿”了吗?office套件提供了VBA,让用户可以写程序、宏来辅助完成办公操作。VBA使用最广泛的当属Excel了。这里,我也写两个宏来自动化Word的一些操作。不了解VBA的读者可以自己百度自学下。
       Alt + F11可以进入VBA,然后在“Normal -> 模块”,右键选择“插入模块”就行了,然后把我下面的代码复制到“模块1”并保存。(Normal是Word打开时会自动载入的一个模板文件,把宏放在这里,可以保证在任意一个Word文档中都能调用。)
[vb]  view plain  copy
  1. Sub 设置代码表格()  
  2. ' author: code4101  
  3. ' 设置代码表格 宏  
  4. '  
  5. '  
  6.     ' 背景色为morning的配色方案,RGB为(229,229,229)  
  7.     With Selection.Tables(1)  
  8.         With .Shading  
  9.             .Texture = wdTextureNone  
  10.             .ForegroundPatternColor = wdColorAutomatic  
  11.             .BackgroundPatternColor = 15066597  
  12.         End With  
  13.         .Borders(wdBorderLeft).LineStyle = wdLineStyleNone  
  14.         .Borders(wdBorderRight).LineStyle = wdLineStyleNone  
  15.         .Borders(wdBorderTop).LineStyle = wdLineStyleNone  
  16.         .Borders(wdBorderBottom).LineStyle = wdLineStyleNone  
  17.         .Borders(wdBorderVertical).LineStyle = wdLineStyleNone  
  18.         .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone  
  19.         .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone  
  20.         .Borders.Shadow = False  
  21.         .AutoFitBehavior (wdAutoFitContent)  '自动调整大小  
  22.     End With  
  23.     With Options  
  24.         .DefaultBorderLineStyle = wdLineStyleSingle  
  25.         .DefaultBorderLineWidth = wdLineWidth050pt  
  26.         .DefaultBorderColor = wdColorAutomatic  
  27.     End With  
  28.       
  29.     ' 段落无首行缩进,行间距为固定值12磅  
  30.     With Selection.ParagraphFormat  
  31.         .LeftIndent = CentimetersToPoints(0)  
  32.         .RightIndent = CentimetersToPoints(0)  
  33.         .SpaceBefore = 0  
  34.         .SpaceBeforeAuto = False  
  35.         .SpaceAfter = 0  
  36.         .SpaceAfterAuto = False  
  37.         .LineSpacingRule = wdLineSpaceExactly  
  38.         .LineSpacing = 12  
  39.         .KeepWithNext = False  
  40.         .KeepTogether = False  
  41.         .PageBreakBefore = False  
  42.         .NoLineNumber = False  
  43.         .Hyphenation = True  
  44.         .FirstLineIndent = CentimetersToPoints(0)  
  45.         .OutlineLevel = wdOutlineLevelBodyText  
  46.         .CharacterUnitLeftIndent = 0  
  47.         .CharacterUnitRightIndent = 0  
  48.         .CharacterUnitFirstLineIndent = 0  
  49.         .LineUnitBefore = 0  
  50.         .LineUnitAfter = 0  
  51.         .MirrorIndents = False  
  52.         .TextboxTightWrap = wdTightNone  
  53.         .AutoAdjustRightIndent = True  
  54.         .DisableLineHeightGrid = False  
  55.         .FarEastLineBreakControl = True  
  56.         .WordWrap = True  
  57.         .HangingPunctuation = True  
  58.         .HalfWidthPunctuationOnTopOfLine = False  
  59.         .AddSpaceBetweenFarEastAndAlpha = True  
  60.         .AddSpaceBetweenFarEastAndDigit = True  
  61.         .BaseLineAlignment = wdBaselineAlignAuto  
  62.     End With  
  63.     ' 清除原有的段落底纹  
  64.     Selection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorAutomatic  
  65. End Sub  
  66.   
  67. Sub 输入连续数字()  
  68. ' author: code4101  
  69.     行数 = InputBox("请输入代码终止行数""输入行数""50")  
  70.     For i = 1 To 行数 - 1  
  71.         Selection.TypeText Text:=i  
  72.         Selection.TypeParagraph  
  73.     Next  
  74.     Selection.TypeText Text:=行数  
  75. End Sub  

       这里我写了两个宏,一个是输入连续数字的宏,读者调用一下玩玩就知道什么功能了。另一个是对代码表格进行一些处理的宏,选中那个一行两列的表格,读者跑跑我的宏就知道效果了。(这两个宏的配置会比较个性化,读者可以根据自己的喜好来开发。)
       代码的最终形式如下


       以上也展示了我平时使用Word写作的习惯。我整理的东西其实更多的是在电脑平台上阅读,而不是打印出来看。所以习惯用“网页视图”而不是A4纸大小的“页面视图”,这样也更方便排更长的单行代码。打开“视图”的“导航窗格”,能详细的了解到这个文档的内容架构与章节间的方便跳转。然后“批注”功能我完全当作一个“个人备注”工具来使用了,对文档的一些地方经常可以补充一些我喜欢说的“废话”。
       正式发布文档的时候,建议关闭批注功能,转成pdf来发布。这样能保证排版格式不会乱,如果按Word发布,不同人的软件版本不同、配置不同,会有不一样的视图效果,可能你觉得很美,到了别人那却变得很丑。

       另外注意另存为pdf时,要设置下面的选项,pdf文档才会带有书签:(设置一次就行了,以后默认都是上次的配置)


5  扩展阅读


关于VBA编程的一个细节
       上述VBA代码第11行的数字15066597读者有没觉得很奇怪?(229, 229, 229)是指RGB的三个颜色值,而15066597这个数其实就是229*(2^16 + 2^8 + 1),计算机基础比较好的想想就明白了~~VBA中很多“莫名其妙”的数值都是这个原理。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
关于Word学习
       推荐Oeasy的Word学习视频。另外侯捷的《Word排版艺术》也是本不错的书,里面有讲到侯老师自己排版代码的方法。话说我的写作风格有点像侯老师——很多废话。
       如果上述两个宏使用的比较频繁,可以自定义菜单栏,把它们加入到选项卡里,参考这篇文章: Excel2013如何在选项卡中添加自定义宏按钮
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
代码格式化
       随着编程水平的进步,发现以前写的代码排版有点乱或跟现在的风格不符怎么办?可以用Astyle,CodeBlocks自带这个插件,结合Astyle,能让排出的代码格式更加整齐统一。
  • 15
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Javaee的影视创作论坛BS_sql server 设计软件源码+数据库+WORD毕业论文文档。 基于Javaee的影视创作论坛的设计与实现的源代码和论文由学员提供.... 基于Javaee的影视创作论坛的设计与实现主要用功能包括: 首页推荐、用户管理、影片管理、评论管理、 预告片管理、海报管理、公告管理、数据检索、用户注册与登录等等功能、统结构如下 (1)后台管理: 管理模块:管理员的登录与退出、管理员个人信息的设置 电影管理模块:实现电影信息的增加、删除、修改、查看功能 实现电影分类信息的增加、删除、修改、查看功能 影评管理模块:实现影评信息的增加、删除、修改、查看功能 预告管理模块:实现预告片信息的增加、删除、修改、查看功能 海报管理模块:实现海报信息的增加、删除、修改、查看功能 公告管理模块:实现公告信息的增加、删除、修改、查看功能 (2)前台管理: 实现网站首页数据展示、海报展示、预告片浏览、公告预览等 实现电影影评的评论发表、查询评论 站内数据搜索 用户的登录和退出 目 录 摘 要 I Abstract II 1 绪论 1 1.1 研究课题背景 1 1.2国内外研究现状 2 1.3主要研究的内容 2 1.4 论文整体结构 2 2 相关开发技术介绍 4 2.1 开发技术及工具简介 4 2.1.1 JSP简介 4 2.1.2 B/S结构 5 2.1.3 数据库简介 6 2.1.3 MyEclipse 10简介 5 2.2 运行环境 8 3 系统分析 9 3.1 可行性分析 10 3.2 网站需求分析 10 3.3 网站需要解决的主要问题 10 3.4 网站目标与功能 11 3.4.1 网站目标 11 3.4.2 网站要达到的功能 11 4 网站的详细设计 16 4.1 后台实现的功能 16 4.1.1 首页推荐 16 4.1.2 用户管理 16 4.1.3 评论管理 16 4.1.4 影片分类 16 4.1.5 影片评分 17 4.2 前台实现的功能 17 4.2.1 网站首页 17 4.2.2 影评评论 17 4.2.3 口碑推荐 17 4.2.4 分享喜欢 18 4.2.5 站内搜索 18 4.2.7 会员注册、登录 18 4.3 数据库设计 18 4.3.1 数据库逻辑设计E-R图 18 4.3.2 数据库逻辑结构 19 5 系统的实现与测试 22 5.1 网站的功能模块描述 22 5.1.1 网站首页 22 5.1.2 影评评论 23 5.1.3 口碑推荐 24 5.1.4 分享喜欢 25 5.1.5 站内搜索 25 5.1.6 会员注册、登录 26 5.2 网站的测试 27 5.2.1 网站测试的意义 27 5.2.2 网站测试的目的和原则 28 5.2.3 网站测试的重要性 30 5.2.4 网站测试的范围 31 5.2.5 网站测试的方法 32 5.2.6 综合测试结果 33 结论 44 致 谢 43 参考文献 44 外文原文 45 外文翻译 51 1 绪论 1.1 研究课题背景 影视,给人们的生活带了来很多欢乐和感动,更加丰富了我们的课余文化生活。国影视正式是从1905年开始的。那一年,国的第一部影评《定军山》是在北京的丰泰照相馆诞生的,是照相馆的老板任庆泰为了向京剧老旦谭鑫培老师祝寿,于是就拍摄了其老师最拿手的几个片断。这几个片段被拿到前门给广大群众当放映,受到了大众的喜欢,于是就此宣告国影视的诞生。 而对于我们来说,更多的了解只是局限于对单个影视的直观感受。 而影评作为影视内容消费的衍生产物,是观众观影后不可或缺的一部分,随之电影的发展,人们除了可以感受到电影本身带了的欢乐和感动之外,还可以通过影评内容拓宽自身的知识层面,丰富了课余文化生活。 同时随着互联网的不断发展,互联网+概念的深入普及,一方面降低了行业间的交流成本,加速了行业间的交流对话,另一方面提高了信息获取的效率,在这样互联网的大环境下,对于影视行业而言,一款基于影视内容创作的社区和论坛对影视从业者而言,显得格外有必要。 影视本身就是一门艺术,而且影视本身就融合了其他的艺术,它有利于提高人的思辩能力、写作能力、审美能力。从写作学的要求看,影评的书写需要的是信息的处理能力,也就是描写、记叙、抒情、议论能力的综合运用。 在传统的影视行业,影视最重要的原理是”视觉暂留”, 通过蒙太奇组合成顺畅而生动的影片整体将按照一定的时序摄制的景物各运动阶段的静止画面连续映现出来,把外界事物的影像及声音摄录在胶片上,运用照相以及录音手段,利用人的是视觉的误差,在人的视觉造就再现景物的运动影像的效果,然后通过放映来表现特定内容的
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值