转载自:http://blog.csdn.net/woohello/article/details/7621651

有时写文档时需要将代码粘贴到word中,但直接粘贴到word中的代码虽能保持换行与缩进等格式,但在一般代码编辑工具中的关键字高亮功能却无法实现,即粘贴到word中的代码不在具有丰富的色彩。使用一款免费软件——notepad++即可实现将关键字高亮的代码粘贴到word中。

首先用notepad++打开源代码文件。notepad++能识别C/C++、Java、matlab等多种语言的源代码。选中要粘贴的代码(如果该代码文件中的所有内容均需要粘贴,则无需选中文字)。然后在选择 插件->NppExport->Copy HTML to clipboard。

然后在word中粘贴即可。

此外,关键字的颜色也可以根据自己的需求在notepad++中进行设置,设置方法:菜单->格式->语言格式设置

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

也可以参考侯捷《word排版艺术》中的vba脚本

由于是代码,所以推荐中文使用宋体(注释中),而英文使用等宽字体(courier new)。

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

最近我经常在word 里面写东西,发现程序代码拷贝到word 里面就没有了在代码编辑器里面的那种语法高亮的效果,感觉不爽。于是我上网搜了搜,发现目前在word 中实现语法高亮的方法主要是通过安装一个插件。由于我先天的对插件比较反感,所以自己动手,使用word 等office 软件都支持的VBA (Visual BAsic For Application) 写了一个语法高亮的宏。

这个宏的功能比较简单,就是利用得到文档中选中部分的代码,然后分词,判断该词的类别,然后着色。我现在使用的分词方法是VBA 提供的,大部分情况下和我们预期的比较一致。但是在某些情况下,比如连续的分隔符,这种分词方法会和C 语言分析器的分词结果不同的。

这个宏除了可以语法着色,还可以为代码标注行号。(听说侯捷在《word 排版艺术》一书中也有一个为代码添加行号的宏。不知道他的宏和我的宏是否雷同。如有雷同,纯属巧合:)

 'script to high light code In document

Private Function isKeyword(w) As Boolean

    Dim keys As New Collection

    With keys

        .Add " if": .Add "else": .Add "switch": .Add "case": .Add "default": .Add "break"

        .Add "goto": .Add "return": .Add "for": .Add "while": .Add "do": .Add "continue"

        .Add "typedef": .Add "sizeof": .Add "NULL": .Add "new": .Add "delete": .Add "throw"

        .Add "try": .Add "catch": .Add "namespace": .Add "operator": .Add "this": .Add "const_cast"

        .Add "static_cast": .Add "dynamic_cast": .Add "reinterpret_cast": .Add "true"

        .Add "false": .Add "null": .Add "using": .Add "typeid": .Add "and": .Add "and_eq"

        .Add "bitand": .Add "bitor": .Add "compl": .Add "not": .Add "not_eq": .Add "or"

        .Add "or_eq": .Add "xor": .Add "xor_eq"

    End With

    isKeyword = isSpecial(w, keys)

End Function

Private Function isSpecial(ByVal w As String, ByRef col As Collection) As Boolean

    For Each i In col

        If w = i Then

            isSpecial = True

            Exit Function

        End If

    Next

    isspeical = False

End Function

Private Function isOperator(w) As Boolean

    Dim ops As New Collection

    With ops

        .Add "+": .Add "-": .Add "*": .Add "/": .Add "&": .Add "^": .Add ";"

        .Add "%": .Add "#": .Add "!": .Add ":": .Add ",": .Add "."

        .Add "||": .Add "&&": .Add "|": .Add "=": .Add "++": .Add "--"

        .Add "'": .Add """"

    End With

    isOperator = isSpecial(w, ops)

End Function

Private Function isType(ByVal w As String) As Boolean

    Dim types As New Collection

    With types

        .Add "void": .Add "struct": .Add "union": .Add "enum": .Add "char": .Add "short": .Add "int"

        .Add "long": .Add "double": .Add "float": .Add "signed": .Add "unsigned": .Add "const": .Add "static"

        .Add "extern": .Add "auto": .Add "register": .Add "volatile": .Add "bool": .Add "class": .Add " private"

        .Add "protected": .Add "public": .Add "friend": .Add "inlIne": .Add "template": .Add "virtual"

        .Add "asm": .Add "explicit": .Add "typename"

    End With

    isType = isSpecial(w, types)

End Function

Sub SyntaxHighlight()

    Dim wordCount As Integer

    Dim d As Integer

    ' set the style of selection

    Selection.Style = "ccode"
    

    d = 0

    wordCount = Selection.Words.Count

    Selection.StartOf wdWord

    While d < wordCount

        d = d + Selection.MoveRight(wdWord, 1, wdExtend)

        w = Selection.Text

        If isKeyword(Trim(w)) = True Then

            Selection.Font.Color = wdColorBlue

        ElseIf isType(Trim(w)) = True Then

            Selection.Font.Color = wdColorDarkRed

            Selection.Font.Bold = True

        ElseIf isOperator(Trim(w)) = True Then

            Selection.Font.Color = wdColorBrown

        ElseIf Trim(w) = "//" Then

            'lIne comment

            Selection.MoveEnd wdLine, 1

            commentWords = Selection.Words.Count

            d = d + commentWords

            Selection.Font.Color = wdColorGreen

            Selection.MoveStart wdWord, commentWords

         ElseIf Trim(w) = "/*" Then

            'block comment

            While Selection.Characters.Last <> "/"

                Selection.MoveLeft wdCharacter, 1, wdExtend

                Selection.MoveEndUntil ("*")

                Selection.MoveRight wdCharacter, 2, wdExtend

            Wend

            commentWords = Selection.Words.Count

            d = d + commentWords

            Selection.Font.Color = wdColorGreen

            Selection.MoveStart wdWord, commentWords

        End If

        'move the start of selection to next word

        Selection.MoveStart wdWord

    Wend

    ' prepare For set lIne number

    Selection.MoveLeft wdWord, wordCount, wdExtend

    SetLIneNumber

End Sub

Private Sub SetLIneNumber()

    Dim lines As Integer

    lines = Selection.Paragraphs.Count

    Selection.StartOf wdParagraph

    For l = 1 To lines

        lIneNum = l & " "

        If l < 10 Then

            lIneNum = lIneNum & " "

        End If

        Selection.Text = lIneNum

        Selection.Font.Bold = False

        Selection.Font.Color = wdColorAutomatic

        p = Selection.MoveDown(wdLine, 1, wdMove)

        Selection.StartOf wdLine

    Next l

End Sub

下面是我给出的使用说明,原文没给出使用说明。

使用方法:
1) 首先为当前文档新定义一个样式,命名为"ccode",专门用来对c代码进行格式化。由于是代码,所以推荐中文使用宋体(注释中),而英文使用等宽字体(courier new)。建立样式的步骤:在word2003中,“格式” → “新样式”

2)将上面的vba代码拷贝到文档中,步骤:在word2003中,“工具” → “宏” → ”VB编辑器“ → ”Normal工程“ → ”Microsoft Word 对象“ ,双击 ”thisDocument"对象,将上面的代码拷贝到新开的窗口中。

当然你也可以把ccode样式和highlight脚本保存到normal模板中,这样以后你再写代码的时候就可以直接用了,不用自己再辛苦定义这些了。

3)选定代码文本,然后执行highlight脚本: “格式” → “宏” → “宏”, 选择SyntaxHighlight宏,然后执行就可以了。

如果想定制语法高亮,那么修改上面的脚本就是了。

在word中使用notepad++实现代码的语法高亮相关推荐

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

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

  2. 【源码】M代码的LaTeX支持包——在LaTeX文件中轻松展示M代码的语法结构

    M代码的LaTeX支持包--在LaTeX文件中轻松展示M代码的语法结构 有很多支持包实现了与此相同的功能. There are many packages out there that doprett ...

  3. CSDN 代码不能语法高亮的原因

    CSDN代码不能语法高亮的原因探索 1.找原因 昨天写完博客发现其中代码不能高亮,本以为是写的格式出了问题.反复修改之后依然无法解决,于是打开源码查看: 打开代码对应的标签源码如下图所示: 其中对应代 ...

  4. 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法

    1.下载notepad++. 2.将代码粘贴进notepad++,或者直接用notepad++打开. 3.点击顶栏 ===> 插件 ===> NppExport ===> cope ...

  5. 【经验】向word中插入格式化的代码块

    参考博客:如何在word中插入代码块 1.打开http://www.planetb.ca/syntax-highlight-word网站 语法高亮显示Word文档中的代码 2.将你的代码复制进去,选择 ...

  6. 在word中的公式以代码形式体现在web上的方法

    现在一般人的在web上显示公式的方式是图片,这种方法比较简单,容易实现,但是却占用了大量的web空间,也影响了web内容的加载速度.再次经过好几天的着实研究终于发现了一种以代码的方式在web端显示公式 ...

  7. word 代码_怎样在Word 中插入 C/C++ 代码

    从心里说,我不喜欢 Word:我喜欢 Latex.然而现实就是这样,明明有感情却不能在一起,没感情的绑得牢牢的 -- 由于写文章的需要,需要在文档里插入C/C++代码.我并不需要关键字高亮,因为印刷是 ...

  8. 分享个人收集或整理的word中常用的vba代码

    在word中通过VBA编写一些常用的函数,再利用快捷键激发,可以有效的提高写作的效率.以下分享个人通过网络收集,或者改造,或者自己录制后修改的代码,有需要的可以自取. 因为已经记不清有些代码的出处了, ...

  9. 利用VBA在Word中排出漂亮的代码

    引言 在学习编程的过程中,常常会使用word来做笔记,下面我将对如何利用word宏来进行代码的排版进行说明 1.工具 我用的是word2007,word2003和word2010操作也差不多 2.基本 ...

最新文章

  1. 算法与数据结构重点归纳
  2. 项目管理利器taiga快速安装
  3. vmware虚拟化(二)安装vsphere5.1
  4. Research Fellow、Research Assistant、predoc等的区别
  5. StackExchange.Redis客户端读写主从配置,以及哨兵配置
  6. 秒懂系列 | 史上最简单的Python Django入门教程
  7. python中char的用法_如何从C++返回char **并使用cType在Python中填充它?
  8. [BZOJ1998][Hnoi2010]Fsk物品调度
  9. Win11 不支持移动任务栏位置;苹果将推出更大尺寸的 iPad Pro;iOS 15 更新 Beta2 版本|极客头条...
  10. 广告贴:本周六的SharePoint技术交流会
  11. 大数据技术落地需要注意哪些问题
  12. Unity3D渲染系列之SkyBox天空盒
  13. 美团监控系统mysql_美团MySQL数据库巡检系统的设计与应用
  14. 软件测试的目的是什么?
  15. 北京地区首届区块链黑客松-DoraHacks
  16. 关于扩散模型(Diffusion Models)中的P2-weighting使用防坑
  17. 游戏“头号玩家”:像做游戏一样做web开发
  18. 学习笔记(04):21天通关Python(视频课)-字符串高级用法
  19. FFmpeg添加x265/hevc编码器支持
  20. Visio画图几个技巧

热门文章

  1. 进程P1、P2、P3、P4和P5的前趋图如下图所示。若用PV操作控制进程P1~P5并发执行的过程,则需要设置6个信号S1、S2、S3、S4,且信号量S1~S4的初值都等于0。下图中a和b处应分别填写(
  2. STL之七:STL各种容器的使用时机详解(精讲大全)
  3. [leetcode] 108.有序数组转换为二叉搜索树
  4. drupal node 显示不同字段 node.tpl.php,修改Drupal Taxonomy Term列表显示方法
  5. python中的out of loop_TclError: out of stack space (infinite loop?)
  6. python入门经典书籍知乎_知乎问题回答 - 《Python100天从新手到大师》 - 开源书籍(oscbook.com)...
  7. Centos7 中文乱码切换中英字符
  8. 点击打印出现IE已经阻止此站点用不安全方式使用 ActiveX 控件解决方
  9. js打印线程id_一文讲透“进程,线程和协程”
  10. 易语言 设置屏幕刷新率 源码_DxOMark新推出手机屏幕素质测试