用LaTeX写C语言实验报告3:标题、代码块和图表

在托更了三个多月以后,才终于想到我这个坑还没有填完,真是太可怕了,得尽快完成了。

开始教程之前,我先介绍一款非常好用的LaTeX编辑器,它不是本地的,而是在线使用的,也就是说只要在任何有网络的电脑上都可以使用啊!!!简直不要太方便啊。它就是著名的Overleaf,不过可惜的它是用了Google CDN,所以导致网站加载速度非常非常慢,大家可以去下载一个叫Replace Google CDN的插件,可以自动替换Google CDN为国内的CDN,我使用之后感觉还蛮不错的。


标题

简单来说,和标题有关的命令只有三个:
/section表示一级标题,/subsubsection表示二级标题,/subsubsubsection则是三级标题

\section{实验题目与要求}
\section{实验内容}
    \subsection{主要函数流程图}
    \subsection{源程序}
\section{实验结果}
\section{实验总结分析}

上述代码生成的效果是这样的:

但看着看着总感觉一级标题和二级标题不太匹配,看着非常不舒服
简单百度之后找到了这个命令:

\ctexset{
    section={format=\Large\bfseries}
}

它可以修改一级标题的格式,例如这里是修改为大号字体并且加粗,把这句话放到导言区就可以了。加完以后效果很不错!




代码块

既然是C语言实验报告,那肯定需要展示代码,由于我之前批过作业,他们都是交的doc格式的实验报告,所以放代码之后效果是这样的:

这真的是可读性非常非常差好不好,既没有缩进也没有高亮,真的不想认真看下去。
而LaTeX就不一样了,它支持拓展,各种各样的功能都可以通过拓展来实现,例如我下面要说的代码块就是一个典型例子。

minted

pymentize是用来做高亮显示非常好的一个Python库,而minted恰恰使用这一语法高亮库来实现代码的高亮显示,其效果做得也非常不错。
正是因为如此,我们首先需要安装Python以及pymentize。

环境配置

  1. 安装Python: 我这里就不赘述了,网上教程也一大堆,随便找一个都可以。
  2. 安装pymentize: 可以看别人的这个笔记,windows下用easy_install安装Pygments

如果你是用本地LaTeX编辑器的话,编译的时候可能会报错,提示说minted Error: You must invoke LaTeX with the -shell-escape flag,这时候需要添加编译参数-shell-escape
以我用的TeXstudio为例,其他的编辑器应该也都大同小异。

  1. 首先进入首选项配置(菜单->Options->Configure TeXstudio)
    2.进入Command选项卡,在XeLaTeX这一行里进行修改,在中间任何位置加入-shell-escape(像我这样)
  2. 点击OK即 可
至此,环境配置完毕

开始使用

首先别忘了在导言区加上\usepackage{minted}

\begin{minted}{c++}  
int main() {  
   printf("hello, world");  
   return 0;  
}  
\end{minted}

用起来很简单,只要让minted环境包围住你的代码就可以了,上面的{c++}是说明语言类型的,效果如下:

不过缩进部分竟然变成了莫名其妙的^^I,查阅一番之后才发现是xelatex的缘故,要再加上-8bit这个编译参数,修改完后效果如下:
不过还是有点瑕疵,例如缩进尺寸与原来的代码不一致。

我查阅了官方文档后发现minted默认的缩进宽度是相当于8个空格,而我们平常写代码缩进是相当于4个空格的宽度,所以得修改minted的默认配置。

如何修改默认配置?

有两种方法:

  1. 只修改当前代码块的配置
\begin{minted}[tabsize=4,linenos=true]{c++} 
...
\end{minted}

像这样子一样以键值对的方式设置属性,例如我这里设置了缩进宽度为4个空格,显示行号

  1. 修改所有代码块的配置
\setminted{linenos=true,tabsize=4}

与之前的ctexset不同的是,它不能放在导言区,要放在document环境(也就是正文区)内,设置一次后,之后所有的代码块都共享这些属性

设置完之后效果非常不错:

除了上面介绍的两个属性以外,还有很多丰富多样的设置,例如高亮风格什么的都可以修改,具体查看上面的官方文档即可

lstlisting

这是另外一种代码高亮的库,不过已经很久没有更新了,功能也没有Minted那么多,我这里就只展示一下范例代码和效果

\usepackage{listings}
\lstset{
    numbers=left, 
    numberstyle= \tiny, 
    keywordstyle= \color{ blue!70},
    commentstyle= \color{red!50!green!50!blue!50}, 
    frame=shadowbox, % 阴影效果
    rulesepcolor= \color{ red!20!green!20!blue!20} ,
    keywordstyle=\color{blue},     % keyword style
    stringstyle=\color{mymauve},  % string literal style
    xleftmargin=2em,xrightmargin=2em, aboveskip=1em,
    framexleftmargin=2em,
    language=C,
    basicstyle=\ttfamily
}
...

\begin{lstlisting}[language=C++]
#include <iostream>
using namespace std;
int main(){
    cout << "Hello world!" << endl;
}
\end{lstlisting}

图表

插入图片

如果只想简单的插入一张图片的话很简单

\includegraphics[keyvals]{imagefile}

keyvals是属性的键值对,若不需要设置的话可以不要,imagefile则是图片相对于tex文件的路径(没有后缀名)
默认情况下,图片是以本来的大小来展示,所以一般情况下我们会这样使用:

\includegraphics[width=\linewidth]{testImage}

其中的\linewidth是指一行的宽度,表示强制设置图片占一行的宽度,如果是0.5\linewidth,就是表示图片占一半的宽度,以此类推。

还有一个重要的命令:\graphicspath{{imgs/}}
它可以设置图片统一的路径,例如你把图片都放在imgs文件夹,那么你设置了上述代码后,includegraphics里的图片路径部分就不需要写“/imgs”了,直接写图片名称即可,如果你有多个路径用来放置图片,那么可以这样:

\graphicspath{{folder1/} {folder2/} {folder3/}}

只是显示简单的一张图片确实很简单,但是如果你想给图片设置标题,让其居中,或者图文混排,就不只是includegraphics这一个命令了,你需要用到figure环境
首先看看下面的代码:

\begin{figure}[h]
    \centering  %插入的图片居中表示
    \includegraphics[width=0.25\linewidth]{testImage}
    \caption{测试图片}  %图片的标题
\end{figure}

效果如下:


基本上注释里面已经将大部分都解释清楚了,除了那个[h],这里的h是here的简称,表示将图片插入到此处,如果没有这个的话会默认将图片插入到当前页面的顶部,而不是当前代码的位置

插入表格

插图可以用其他软件做好插入,但表格一般都还是直接在LATEX 里面完成的。制作表格,需要确定的是表格的行、列对齐模式和表格线,这是由 tabular环境完成的:

\begin{table}[H]
    \begin{tabular}{|rrr|} 
        \hline 
        直角边$a$ & 直角边$b$ & 斜边 $c$\\ 
        \hline  3 & 4 & 5 \\ 
        5 & 12 & 13 \\ 
        \hline 
    \end{tabular}% 
    \qquad 
    ($a^2 + b^2 = c^2$) 
\end{table}

tabular 环境有一个参数,里面声明了表格中列的模式。在前面的表格中,|rrr| 表示表格有三列,都是右对齐,在第一列前面和第三列后面各有一条垂直的表格线。在 tabular 环境内部,行与行之间用命令\\隔开,每行内部的表项则用符号 & 隔开。表 格中的横线则是用命令\hline产生的。 表格与\includegraphics命令得到的插图一样,都是一个比较大的盒子。一般也 放在浮动环境中,即table环境,参数与大体的使用格式也与figure环境差不多,只 是\caption命令得到的标题是“表”而不是“图”。

这里并没有给表格加标题,也没有把内容居中,而是把表格和一个公式并排排开, 中间使用一个\qquad分隔。命令\qquad产生长为2em(大约两个“M”的宽度)的空 白。因为我们已经使用\qquad生成足够长度的空格了,所以再用\end{tabular}后的注释符取消换行产生的一个多余的空格,这正好达到我们预想的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容