用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。
环境配置
- 安装Python: 我这里就不赘述了,网上教程也一大堆,随便找一个都可以。
- 安装pymentize: 可以看别人的这个笔记,windows下用easy_install安装Pygments
如果你是用本地LaTeX编辑器的话,编译的时候可能会报错,提示说minted Error: You must invoke LaTeX with the -shell-escape flag
,这时候需要添加编译参数-shell-escape
以我用的TeXstudio为例,其他的编辑器应该也都大同小异。
- 首先进入首选项配置(菜单->Options->Configure TeXstudio)
2.进入Command选项卡,在XeLaTeX这一行里进行修改,在中间任何位置加入-shell-escape
(像我这样)
- 点击OK即 可
至此,环境配置完毕
开始使用
首先别忘了在导言区加上\usepackage{minted}
\begin{minted}{c++}
int main() {
printf("hello, world");
return 0;
}
\end{minted}
用起来很简单,只要让minted环境包围住你的代码就可以了,上面的{c++}
是说明语言类型的,效果如下:
-8bit
这个编译参数,修改完后效果如下:
不过还是有点瑕疵,例如缩进尺寸与原来的代码不一致。
我查阅了官方文档后发现minted默认的缩进宽度是相当于8个空格,而我们平常写代码缩进是相当于4个空格的宽度,所以得修改minted的默认配置。
如何修改默认配置?
有两种方法:
- 只修改当前代码块的配置
\begin{minted}[tabsize=4,linenos=true]{c++}
...
\end{minted}
像这样子一样以键值对的方式设置属性,例如我这里设置了缩进宽度为4个空格,显示行号
- 修改所有代码块的配置
\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}
后的注释符取消换行产生的一个多余的空格,这正好达到我们预想的效果。