原文: https://blog.csdn.net/bruce_shan/article/details/73302756
--------------------------------------------------------------------
学数学和计算机,当然还是用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 工欲善其事,必先利其器
2 基本操作
- 用Notepad++直接编辑代码文件,注意文件后缀,比如.cpp是C++程序,.m是Matlab,写对后缀表示的文件类型,才有对应的语法高亮效果。
- 选中需要的代码块(或者不选,默认对全文操作),使用“插件 -> NppExport”,具体见下图
- 然后直接粘贴到Word就行了。
3 更上一层楼: 行号与灰色背景
![](https://i-blog.csdnimg.cn/blog_migrate/eb3ee2ca425bafd10c51c49d32c7a538.png)
- 将行号的数字颜色改成背景色就能“隐藏行号”了,需要的时候再调回黑色。
- 注意表格线框是可以隐藏的。
- 有时候代码排版的比较紧凑,行间距较小会导致下划线"_"没掉了,这时可以试试用“Consolas”字体。
- 如果以后需要从Word复制代码,放到表格第二列的左上角,鼠标变成一个黑色箭头时,就能单击全选代码文本进行复制了。行号对源代码不会有任何的干扰。
- 注意代码不要过长,长度超过一行时,可能会带来一些不便。
- 如果发现空格并没有与字母等宽(如下图所示),则是半全角字符的bug作祟。在“文件 -> 选项 -> 高级”的“布局选项”去掉“区分半角字符和全角字符”的选项即可。
4 更加智能与自动化
- Sub 设置代码表格()
- ' author: code4101
- ' 设置代码表格 宏
- '
- '
- ' 背景色为morning的配色方案,RGB为(229,229,229)
- With Selection.Tables(1)
- With .Shading
- .Texture = wdTextureNone
- .ForegroundPatternColor = wdColorAutomatic
- .BackgroundPatternColor = 15066597
- End With
- .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
- .Borders(wdBorderRight).LineStyle = wdLineStyleNone
- .Borders(wdBorderTop).LineStyle = wdLineStyleNone
- .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
- .Borders(wdBorderVertical).LineStyle = wdLineStyleNone
- .Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
- .Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
- .Borders.Shadow = False
- .AutoFitBehavior (wdAutoFitContent) '自动调整大小
- End With
- With Options
- .DefaultBorderLineStyle = wdLineStyleSingle
- .DefaultBorderLineWidth = wdLineWidth050pt
- .DefaultBorderColor = wdColorAutomatic
- End With
- ' 段落无首行缩进,行间距为固定值12磅
- With Selection.ParagraphFormat
- .LeftIndent = CentimetersToPoints(0)
- .RightIndent = CentimetersToPoints(0)
- .SpaceBefore = 0
- .SpaceBeforeAuto = False
- .SpaceAfter = 0
- .SpaceAfterAuto = False
- .LineSpacingRule = wdLineSpaceExactly
- .LineSpacing = 12
- .KeepWithNext = False
- .KeepTogether = False
- .PageBreakBefore = False
- .NoLineNumber = False
- .Hyphenation = True
- .FirstLineIndent = CentimetersToPoints(0)
- .OutlineLevel = wdOutlineLevelBodyText
- .CharacterUnitLeftIndent = 0
- .CharacterUnitRightIndent = 0
- .CharacterUnitFirstLineIndent = 0
- .LineUnitBefore = 0
- .LineUnitAfter = 0
- .MirrorIndents = False
- .TextboxTightWrap = wdTightNone
- .AutoAdjustRightIndent = True
- .DisableLineHeightGrid = False
- .FarEastLineBreakControl = True
- .WordWrap = True
- .HangingPunctuation = True
- .HalfWidthPunctuationOnTopOfLine = False
- .AddSpaceBetweenFarEastAndAlpha = True
- .AddSpaceBetweenFarEastAndDigit = True
- .BaseLineAlignment = wdBaselineAlignAuto
- End With
- ' 清除原有的段落底纹
- Selection.ParagraphFormat.Shading.BackgroundPatternColor = wdColorAutomatic
- End Sub
- Sub 输入连续数字()
- ' author: code4101
- 行数 = InputBox("请输入代码终止行数", "输入行数", "50")
- For i = 1 To 行数 - 1
- Selection.TypeText Text:=i
- Selection.TypeParagraph
- Next
- Selection.TypeText Text:=行数
- End Sub
这里我写了两个宏,一个是输入连续数字的宏,读者调用一下玩玩就知道什么功能了。另一个是对代码表格进行一些处理的宏,选中那个一行两列的表格,读者跑跑我的宏就知道效果了。(这两个宏的配置会比较个性化,读者可以根据自己的喜好来开发。)
![](https://i-blog.csdnimg.cn/blog_migrate/d72a563e79f5e6799efe1aea318e0d53.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ee3362c6c5286514c6b33d2916d73f0e.png)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
关于Word学习
推荐Oeasy的Word学习视频。另外侯捷的《Word排版艺术》也是本不错的书,里面有讲到侯老师自己排版代码的方法。话说我的写作风格有点像侯老师——很多废话。
代码格式化
随着编程水平的进步,发现以前写的代码排版有点乱或跟现在的风格不符怎么办?可以用Astyle,CodeBlocks自带这个插件,结合Astyle,能让排出的代码格式更加整齐统一。