用LaTeX写C语言实验报告2:封面的制作

继上回工具已经准备好,接下来就应该是正式开始制作了吧?

但在开始之前我们先了解一下基本语法知识吧hhh


TeX文档由导言区和正文区组成,

\documentclass{article}
\usepackage{graphicx} % 图形拓展库,导入它才能显示图片
\usepackage[a4paper]{geometry} % 调整纸张大小和页边距的包,中括号中规定了纸张大小
\geometry{left=2.0cm,right=2.0cm,top=2.0cm,bottom=2.0cm} % 页边距设置
% 导言区的其他内容
\begin{document}
   Hello LaTeX
   % 正文部分的其他内容
\end{document}

第一行的\documentclass{article},用来标注文档类型,包括article,book,report等等。
从第二行开始到\begin{document}之前,都是导言区的内容,一般用来导入拓展包(就和C语言里的#include<xxx>差不多作用),定义一些全局属性什么的。例如这里导入了图形拓展包和geometry拓展包,然后设置了页边距什么的。
\begin{document}\end{document}里面包围的则是正文,文档的所有内容都在这里。


TeX主要有两种类型的语句(姑且叫它语句吧)
第一种叫做命令,像\usepackage{graphicx}\documentclass{article}这样的叫就是命令,只占一行,它的标准格式如下:

\commandname[arg1]{arg2}

也存在多个中括号和大括号的情况,具体我也不是很清楚

第二种叫环境,环境有三部分,分别是开始的\begin{environmentname},中间的文本以及结束的\end{environmentname},支持多级嵌套。


然后你会发现写中文会编译错误或者编译成功了也无法显示。前面我说了原本TeX的设计者压根就没考虑亚洲国家的语言,所以难怪不支持中文,不过还好我们国人很强大,将中文已经适配好了。
只要在导言区加一个\uscpackage{ctex}就可以完美的支持中文,或者直接用\documentclass{ctexart}代替原来的\documentclass{article}也可以。


基础知识介绍完毕,接下来开始正式制作吧!

我要做的实验封面大致上长这样

首先遇到的难题就是修改字体大小,根据网上所查,改字体大小有下面的一系列命令:

\tiny
\scriptsize
\footnotesize
\small
\normalsize
\large
\Large
\LARGE
\huge
\Huge

字体大小依次从小变大。

但我试了之后发现最大的 \Huge依然不够大,
后来我又想起了ctex自带的字体大小命令:\zihao{-5},里面的数字对应中文里的字体大小,例如5就是五号字体,-5就是小五号字体,而0则是初号。但我尝试之后发现最大的初号还是不够大。emmm,只能继续百度了。

搜寻一整子之后发现了这个命令\fontsize{24pt}{24pt},它可以任意设置字体大小,前面的数字代表字体的大小,这里的单位pt和我们word上的字体单位一样,后面的数字百度上说是行距,但我改了以后没什么变化,改成0也没事,它的作用我还不清楚,这里存疑。

需要注意的是上面说的这些改变字体大小的命令,只要在某个位置有这个命令,接下来所有的文字的字体都会变成同样的大小。

如果只想临时改变字体大小的话可以这样 {\Huge 最大字体},这样就不会影响后面文字的大小了。我估计这些命令的作用域(照抄C语言里面的概念hhh)都是在当前大括号内部。


字体的问题解决之后又遇到了新问题,“南华大学”和“实验报告”之间隔得距离太近,要拉开一点,要用到\vspace*{24pt},里面的数字就是垂直间隔的距离。还有类似的命令\hspace*{24pt}是控制水平间隔的。

做完之后整体效果还不错:
\documentclass[UTF8]{ctexart}
\usepackage[a4paper]{geometry} % 调整纸张大小和页边距的包,中括号中规定了纸张大小
\geometry{left=2.0cm,right=2.0cm,top=2.0cm,bottom=2.0cm} % 页边距设置
\begin{document}
    \begin{titlepage}
        \heiti
        \vspace*{64pt}
        \begin{center}
            \fontsize{72pt}{0} 南华大学\\
            \vspace*{36pt}
            \fontsize{48pt}{0}{实\quad 验\quad 报\quad 告}\\
            \vspace*{48pt}
            \LARGE(20\quad\~{}20\quad 学年度\qquad 第\quad 学期)\\
            \vspace*{48pt}
        \end{center}
    \end{titlepage}
\end{document}

这里面还有需要解释的地方就是TeX里面符号不能直接写,要改成\~{},还有中文里面空格也不能直接写,要在前面加一个\,与此类似的标点还有:

# 用在宏定义中
$ 数学模式符号
% 注释符号
^ 上标符号
& 表格对齐符号 
{ } 分组符号 
_  数学模式的下标符号
\ 宏命令符号

它们都因为有特殊含义不能直接使用,基本上都是通过在前面加一个\来输入,除了 \符号是\textbackslash^符号是\^{}

center环境中的文字会居中,与此类似地还有flushleft和flushright环境,分别是左对齐和右对齐。至于那个titlepage环境,本来多页的文档会在右上角默认显示当前的页数,封面肯定不需要页数嘛,在titlepage环境中就不会占据页数了,还有自动分页的功能。

至于那个 \heiti嘛,顾名思义,之后的字体都变成黑体,是CTeX宏包提供的命令,与此类似的还有\fangsong \kaishu \songti,意思大家肯定也可以猜出来。

关于空格和换行

在latex里多个空格与一个空格效果是一样的,而且在中文之间普通的空格也没用,得在前面加一个\,直接这样说说不明白,干脆上例子吧:

你好      哈哈哈哈hello     world

上面的代码生成后的文字是这样的:你好哈哈哈哈hello world,这下就明白了吧。英文中无论多少个空格都只算一个空格,而在中文中emmm无论多少个空格都相当于没有空格......不知道ctex的设计者怎么想的。
于是想用空格的话得用命令写,除了前面讲的在空格前加\代表一个空格之外,汇总一下有这些命令:

a\qquad b   %四个正常空格
a\quad b    %两个正常空格
a\ b        %正常空格,也就是我们按下空格键所产生的空格
a\;b        %小空格
a\,b        %超小的空格
a\!b        %a和b之间完全紧贴在一起,需要反向缩进

至于这个小和超小具体有多小就自己尝试一下吧,毕竟实践出真知hhhhh

关于回车的话,TeX里面直接回车是不能换行的,得用\newline来换行,或者直接打两个斜杠\\也是一样的效果。


接下来便是下面的填空部分


本以为很简单,只要用下划线命令\underline{}然后在里面疯狂加空格就好了,这样确实可以实现功能,但有一个问题,就是我后期是要把它做成模板的,让用户可以像\documentclass{report}这样使用它。那我肯定不能让用户自己决定放多少空格,而且单纯用空格的话里面的文字改了的话还得修改空格的数量与位置,非常麻烦。

于是我上网寻找,找到了一个非常好的命令:

\makebox[宽度]{文本}

这个命令可以创造一个看不见的矩形,将文本包围在里面,里面的文本默认是居中,如果不想居中的话可以这样:\makebox[宽度][位置]{文本},位置那里可以输入的值有l:左端;r:右端;s:两端。
这个命令就很舒服了,还可以精准控制下划线的宽度,岂不美哉?

还有类似的命令叫framebox,区别是会有一个黑色的框框将文本包围起来。


经过多次努力,封面完成了
代码如下:

\documentclass[UTF8]{ctexart}
\usepackage[a4paper]{geometry} % 调整纸张大小和页边距的包,中括号中规定了纸张大小
\geometry{left=2.0cm,right=2.0cm,top=2.0cm,bottom=2.0cm} % 页边距设置
\begin{document}
    \begin{titlepage}
        \heiti
        \vspace*{64pt}
        \begin{center}
            \fontsize{72pt}{0} 南华大学\\
            \vspace*{36pt}
            \fontsize{48pt}{0}{实\quad 验\quad 报\quad 告}\\
            \vspace*{48pt}
            \LARGE(20\quad\~{}20\quad 学年度\qquad 第\quad 学期)\\
            \vspace*{48pt}
        
            \LARGE 课程名称\ \ \underline{\makebox[200pt]{C程序设计}}\\
            \LARGE 实验名称\ \ \underline{\makebox[200pt]{成绩管理系统 V2.0}}\\
            \vspace*{72pt}
        
            \Large 姓名\ \ \underline{\makebox[108pt]{}}\ \ 学号\ \ \underline{\makebox[108pt]{}}\\
            \Large 学院\ \ \underline{\makebox[108pt]{}}\ \ 班级\ \ \underline{\makebox[108pt]{}}\\
            \Large 地点\ \ \underline{\makebox[108pt]{}}\ \ 教师\ \ \underline{\makebox[108pt]{}}\\
        \end{center}
    \end{titlepage}
\end{document}

生成后的pdf是这样的:

哇,简直是太完美了。


总结

由于本期新学了很多东西,在这里总结一下
首先TeX有两种语句:\commandname[arg1]{arg2}\begin{environmentname}中间文本\end{environmentname},分别叫命令和环境
然后一个TeX文档有两部分,分别是导言区和正文区,它们各有各的作用
接着是不能直接输入,而是要转义的符号:~#$%^&{}_\
最后是一堆命令:

\documentclass{article}  %定义文档类型
\uscpackage{ctex}  %导入拓展包,这里是中文支持包

%从小到大的各种字体大小
\tiny  \scriptsize  \footnotesize   \small   \normalsize
\large \Large    \LARGE   \huge   \Huge

\zihao{-5}  %设置中文字号
\fontsize{24pt}{24pt}  %设置具体的字体大小,第二个参数作用不明
\vspace*{24pt}    \hspace*{24pt}  %设置垂直和水平间距
\\   \newline  %换行
\qquad \quad \  a\; \, \!  %从大到小的各种空格
\underline{文本}  %给文本加下划线
\makebox[宽度][位置]{文本}  %在文本外面包围一个虚拟的矩形,默认为居中
\framebox[宽度][位置]{文本} %周围有黑色的边框,其他与上面一致
\heiti \fangsong \kaishu \songti %各种中文字体

还有两种环境

\begin{titlepage} 封面内容 \end{titlepage} %设置里面的内容为封面,不占据一个页数
\begin{center|flushleft|flushright} %居中,左对齐和右对齐

本期到此结束,让我们下期再见

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容