• [杂记]如何在LaTeX里插入高亮代码


    继上次学会在ppt里面插入带有高亮的c程序代码之后,zyy在这条不归路上越走越远…… 好的,长话短说,今天我介绍的是怎么在LaTeX中插入高亮的c程序代码。(其实不止c程序的代码,别的语言也是可以的,本文以c代码为例)(zyy你作业写完了吗!一天就知道写博客不去好好学习挂科了怎么办!)(……写完就去好好学习别着急…… ♪(^∇^*))

    本文将介绍两种方法,当然两种都需要LaTeX(废话……),第二种需要额外的一个软件——Highlight。

    [方法一]使用Listings宏包对代码进行高亮显示

    这里不讲原理,直接说例子。

    比如我们想插入这样的一段代码:

     1 /*
     2 PROG:LeTeX test
     3 NAME:zyy 
     4 */
     5 #include <stdio.h>
     6 int main()
     7 {
     8     //Note
     9     printf("Hello world!
    ");
    10     return 0;
    11 }

    给出对应的tex的代码,注意listings对代码进行高亮要使用xcolor宏包(这里我找不到tex的高亮…… 醉了…… ):

     1 documentclass[12pt]{article}
     2 usepackage{listings}
     3 usepackage{xcolor}
     4 lstset{
     5     %行号
     6     numbers=left,
     7     %背景框
     8     framexleftmargin=10mm,
     9     frame=none,
    10     %背景色
    11     %backgroundcolor=color[rgb]{1,1,0.76},
    12     backgroundcolor=color[RGB]{245,245,244},
    13     %样式
    14     keywordstyle=fcolor{blue},
    15     identifierstyle=f,
    16     numberstyle=color[RGB]{0,192,192},
    17     commentstyle=itcolor[RGB]{0,96,96},
    18     stringstyle=
    mfamilyslshapecolor[RGB]{128,0,0},
    19     %显示空格
    20     showstringspaces=false
    21 }
    22 
    23 egin{document}
    24 egin{lstlisting}[language={C}]
    25 /*
    26 PROG:LeTeX test
    27 NAME:zyy
    28 */
    29 #include <stdio.h>
    30 int main()
    31 {
    32     //Note
    33     printf("Hello world!
    ");
    34     return 0;
    35 }
    36 end{lstlisting}
    37 end{document}

    实现的样子如下:

    这里有一个弊端,就是似乎不能插入中文,我试过了用CJK的环境也不行,可能是因为我对LaTeX了解还很少,如果有人实现了代码中的中文显示,请不吝赐教!

    当然,我个人是觉得这个不太好看,所以建议不怕麻烦的同学看后一种方法。

    [方法二]使用Highlight对代码进行高亮处理

    Highlight是一款软件,可以生成许多种程序语言的高亮,并以多种形式输出,其中包括LaTeX。

    这里给出下载地址(真的没有广告费):http://www.andre-simon.de/zip/download.php

    Highlight的使用也相当简单,下面是它的界面:

    注意到左下角的选项版,选择LaTeX输出即可,其他参数可以自己设置。这里值得一提的是,高亮主题非常多,我没有全部尝试过,不过相对来说比较喜欢bclear,当然这一款的对比度并不是很强烈,所以看个人爱好选择吧。我的选择如下:

    这里注意一下选择“内嵌页面样式(defs)”。将预览结果复制到剪贴板之后,新建一个.tex文档,粘贴即可。

    当然这里会有几个小问题需要修改一下:

    1、为了支持中文,需要用到CJK宏包。在前面加入“usepackage{CJK}”,并在正文中相应地添加“egin{CJK*}{GBK}{song}”和“end{CJK*}”;

    2、有一个似乎是为了插入双引号的方式,似乎有点问题(可能是LaTex的版本不兼容),作这样的修改即可:加入“ ewcommand{dq}{"}”,并把正文中的“shorthandoff{"}”和“shorthandon{"}”注释掉。

    (这个语法我找了很久,才在这里找到解释,感谢:http://tex.stackexchange.com/questions/299721/using-dq-in-subsections-has-an-extra

    3、它生成的代码的“end{document}”之间有空格,把空格删掉。

    首先给出代码:

     1 documentclass{article}
     2 usepackage{color}
     3 usepackage{alltt}
     4 usepackage[T1]{fontenc}
     5 usepackage[latin1]{inputenc}
     6 usepackage{CJK}%中文
     7 
     8 
    ewcommand{hlstd}[1]{	extcolor[rgb]{0.2,0.2,0.2}{#1}}
     9 
    ewcommand{hlnum}[1]{	extcolor[rgb]{0.06,0.58,0.63}{#1}}
    10 
    ewcommand{hlesc}[1]{	extcolor[rgb]{0.86,0.41,0.09}{#1}}
    11 
    ewcommand{hlstr}[1]{	extcolor[rgb]{0.06,0.58,0.63}{#1}}
    12 
    ewcommand{hlpps}[1]{	extcolor[rgb]{0.06,0.58,0.63}{#1}}
    13 
    ewcommand{hlslc}[1]{	extcolor[rgb]{0.59,0.59,0.59}{#1}}
    14 
    ewcommand{hlcom}[1]{	extcolor[rgb]{0.59,0.59,0.59}{#1}}
    15 
    ewcommand{hlppc}[1]{	extcolor[rgb]{0.41,0.78,0.23}{#1}}
    16 
    ewcommand{hlopt}[1]{	extcolor[rgb]{0.2,0.2,0.2}{#1}}
    17 
    ewcommand{hlipl}[1]{	extcolor[rgb]{0.45,0.46,0.77}{#1}}
    18 
    ewcommand{hllin}[1]{	extcolor[rgb]{0.59,0.59,0.59}{#1}}
    19 
    ewcommand{hlkwa}[1]{	extcolor[rgb]{0.23,0.42,0.78}{#1}}
    20 
    ewcommand{hlkwb}[1]{	extcolor[rgb]{0.63,0,0.31}{#1}}
    21 
    ewcommand{hlkwc}[1]{	extcolor[rgb]{0,0.63,0.31}{#1}}
    22 
    ewcommand{hlkwd}[1]{	extcolor[rgb]{0.78,0.23,0.41}{#1}}
    23 definecolor{bgcolor}{rgb}{1,1,1}
    24 
    ewcommand{dq}{"}
    25 
    26 	itle{Source file}
    27 egin{document}
    28 egin{CJK*}{GBK}{song}
    29 pagecolor{bgcolor}
    30 
    ewsavebox{hlboxopenbrace}
    31 
    ewsavebox{hlboxclosebrace}
    32 
    ewsavebox{hlboxlessthan}
    33 
    ewsavebox{hlboxgreaterthan}
    34 
    ewsavebox{hlboxdollar}
    35 
    ewsavebox{hlboxunderscore}
    36 
    ewsavebox{hlboxand}
    37 
    ewsavebox{hlboxhash}
    38 
    ewsavebox{hlboxat}
    39 
    ewsavebox{hlboxbackslash}
    40 
    ewsavebox{hlboxpercent}
    41 
    ewsavebox{hlboxhat}
    42 setboxhlboxopenbrace=hbox{verb.{.}
    43 setboxhlboxclosebrace=hbox{verb.}.}
    44 setboxhlboxlessthan=hbox{verb.<.}
    45 setboxhlboxgreaterthan=hbox{verb.>.}
    46 setboxhlboxdollar=hbox{verb.$.}
    47 setboxhlboxunderscore=hbox{verb._.}
    48 setboxhlboxand=hbox{verb.&.}
    49 setboxhlboxhash=hbox{verb.#.}
    50 setboxhlboxat=hbox{verb.@.}
    51 setboxhlboxbackslash=hbox{verb..}
    52 setboxhlboxpercent=hbox{verb.\%.}
    53 setboxhlboxhat=hbox{verb.^.}
    54 defurltilda{kern -.15emlower .7exhbox{~{}}kern .04em}
    55 
    oindent
    56 	tfamily
    57 %shorthandoff{"}
    58 hlstd{}hllin{ 1 }hlcom{/{*}}\
    59 hllin{ 2 }hlcom{项目:LeTeX测试}\
    60 hllin{ 3 }hlcom{作者:zyy}\
    61 hllin{ 4 }hlcom{{*}/}hlstd{}\
    62 hllin{ 5 }hlppc{#include usebox{hlboxlessthan}stdio.husebox{hlboxgreaterthan}}\
    63 hllin{ 6 }hlstd{}hlkwb{int }hlstd{}hlkwd{main}hlstd{}hlopt{()}\
    64 hllin{ 7 }hlstd{}hlopt{usebox{hlboxopenbrace}}\
    65 hllin{ 8 }hlstd{ }hlslc{//这里是中文注释}\
    66 hllin{ 9 }hlstd{ }hlkwd{printf}hlstd{}hlopt{(}hlstd{}hlstr{dq{}Hello world!}hlesc{$ackslash$n}hlstr{dq{}}hlstd{}hlopt{);}\
    67 hllin{10 }hlstd{ }hlkwa{return }hlstd{}hlnum{0}hlstd{}hlopt{;}\
    68 hllin{11 }hlstd{}hlopt{usebox{hlboxclosebrace}}hlstd{}\
    69 mbox{}
    70 
    ormalfont
    71 
    ormalsize
    72 %shorthandon{"}
    73 end{CJK*}
    74 end{document}
    75 (* LaTeX generated by highlight 3.28, http://www.andre-simon.de/ *)

    最后的效果是这样的:

    这个比前一种方式好多了是吧?

    [总结]

    使用listings相当简便,要配置的东西并不多,也能实现高亮的效果;Highlight的高亮效果更加丰富,并且支持中文注释,只是实现略复杂一些。

    时隔两年后的更新:

    感谢@SYCstudio的交流,学习到了一种新的方法,使用minted宏包来实现代码高亮,个人觉得效果还不错,跟Highlight的效果差不多,就是最开始的配置稍微麻烦一点,不过配置好了之后每次使用会比较方便。这里贴一个介绍如何使用minted宏包的博客地址:https://blog.csdn.net/u012705410/article/details/50605374

    希望跟大家一起交流,共同进步。

  • 相关阅读:
    [iOS 主要框架的总结]
    [无线传感器 网络中的节点定位技术]
    [JAVA 多种方式读取文件]
    [IOS swift对比oc]
    [IOS 静态库]
    [U3D 导出Xcode工程包,用Xcode给U3D脚本传递参数]
    [U3D 添加大地、天空,用第一视角看看自己做的世界]
    [U3D 画起重机,绑脚本和控制它运动的基本操作]
    Flutter 国际化适配
    Error:Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Coul完美解决
  • 原文地址:https://www.cnblogs.com/CQBZOIer-zyy/p/5358709.html
Copyright © 2020-2023  润新知