学习latex之前大多数使用word的,甚至精通word排版的,对于latex这种使用代码编程进行论文排版或ppt制作就显得比较费劲,比如平时很简单的居中、加粗、空行、插图等一键操作,到了latex中就抓瞎。
为了写个作业模板(为论文模板作准备),我尝试了word的一些常用功能,并总结了其LaTeX的表述方式,总结在下文中。这里并没有做到干湿分离(命令与文本分离),只是单纯为了实现想要的操作。
环境:MacOS Catalina 10.15.3
tex版本:Texlive2019
编辑器:TexStudio or VScode
下载texlive2019后一路next即可,在终端验证是否安装成功,最好打开texlive utilitly进行安装包的更新,以防出错;下载texstudio之后,打开设置–>常规–>语言,设置为中文,打开构建,选择默认编译器为xeLatex。
latex可以分成命令与文本,故大的构成为导言区与正文区,导言区的基本指令为指明文档类与加载宏包
\documentclass[选项]{文档类}
\usepackage{宏包}
正文区的基本构成如下:
\begin{document}
正文
\end{document}
加载文档类(article、book、letter等),加载宏包(ctex、amsmath等)在document环境中可以输入正文,简单示例如下:
\documentclass[a4paper, UTF8]{article} % 使用UTF-8编码,默认纸张为A4
\usepackage{ctex}
\begin{document}
This is my first Latex document.\\
Hello TeX!
\end{document}
macOS此时会出现无法加载中文的情况,及时使用UTF8
方法一:
\usepakage[fontset=mac]{ctex}
方法二:
\usepakage{CJK}
\setCJKmainfont{Songti SC} %使用系统中文字体库
用word写文档时,一般使用默认设置,然后直接打字、空格、回车或者点点工具栏即可完成一篇文档
latex进行页面设置需要加载geometry宏包。在指明文档类的时候可以设置纸张大小,也就是设置了paperheight和paperwidth,我们可以从word页面设置上将参数复制过来,使用如下命令进行页面设置。
\usepackage{geometry}
\geometry{
a4paper,
left=3.17cm,
right=3.17cm,
top=2.54cm,
bottom=2.54cm,
headsep=1.5cm,
footskip=1.75cm
}
页眉页脚设置需调用 f a n c y fancy fancy宏包。
word中设置页眉页脚最常用的是页码格式、页眉格式、首页不同、奇偶不同以及下划线等。latex中页眉页脚共有6个位置,分别是页眉和页脚的左、中、右,通过如下命令可以完成.
页眉页脚内容填写、奇偶页不同等设置,parameter见下表。
\fancy[parameter]{content}
首页不同、页码格式等见下表,参数具体意思可查看手册
word功能 | Latex命令 | 参数 |
---|---|---|
此页无页码 | \thispagestyle{empty} | empty plain headings muheadings |
设置起始页码 | \setcounter{page}{num} | num为设定的数字 |
设置页码格式 | \pagenumbering{style} | arabic roman Roman alpha Alph |
设置横线宽度 | \renewcommand{\headrulewidth}{0pt} | 设定数字为期望大小(设置页脚对应为\footrulewidth) |
像论文通常要求页眉的线为文武线,可以通过重新定义headrule来绘制文武线并调整其到页眉的距离
\renewcommand{\headrule}{
\vspace{10pt} %定制横线到页眉的距离
\hrule width\headwidth height1.6pt \vspace{1.2pt} %定制文武线粗细及间距
\hrule width\headwidth height0.4pt
}
此外,如论文中常见的第一章与第二章页眉不同,可以在结束第一章文本是,再次使用上述命令进行更换。
一个页眉页脚的实例如下:
%导言区
\pagestyle{fancy}
\fancyhead[C]{\zihao{3}\songti 大作业报告}
\fancyhead[LE, RO]{\zihao{-3}\songti 深度学习}
\fancyfoot[C]{\Large \thepage} %\thepage表示该页页码,并设置其大小
\renewcommand{\headrulewidth}{0pt} %取消页眉横线
\renewcommand{\footrulewidth}{0pt} %取消页脚横线
%正文区
\begin{document}
\thispagestyle{empty} %首页不设置页码
\newpage %另起一页
\setcounter{page}{1} %第二页页码为1
\pagenumbering{arabic} %页码格式为阿拉伯数字
\end{document}
article文档类默认字体大小为10pt,可以在调用文档类时更改默认大小
\documentclass[12pt]{article}
word中可以直接选择字体字号,而latex中自然也有着对应规则:
在默认字号下,通过使用字体命令即可获得对应大小的输出,对于中文,ctex宏包下也有着更简便的命令:
注意,当局部更改字号时,最好使用大括号将命令与所选文本同时框选。
一般的对非中文字符,常用的为新罗马字体,可以在导言区统一设置
\setmainfont{Times New Roman} %字体名称需要与设备字体库相符
对于中文字体,就没有我们word那么舒服的使用各种花式字体,通常Ctex宏包下预定义了一下四种中文字体
\songti \heiti \fangsong \kaishu
不用说也知道是什么字体了,同样地,我们也可以在导言区统一设置默认字体
\setCJKmainfont{\songti}
字体的颜色需要调用宏包 c o l o r color color,具体地
\textcolor{red}{text} %red blue green black white cyan yellow magenta
% 方式一
\begin{center} %居中center、居左flushleft、居右flushright
Hello tex!
\end{center}
% 方式二
{\centering Hello tex!}
{\raggedleft Hello tex!}
{\raggedright Hello tex!}
Latex的这三个操作同word有很大不同,word中空格使用空格键即可,latex可使用\quad或者(空格)进行一次空格;使用\进行换行,latex中的空行显示为分段,也可以使用\par命令进行分段。
% 加粗 方式一
{\textbf Hello tex!}
% 加粗 方式二
{\bfseries Hello tex!}
% 斜体 方式一
{\textit Hello tex!}
% 斜体 方式二
{\itseries Hello tex!}
% 下划线
{\underline Hello tex!}
latex中的行距包括两部分,一个与字体大小相关,称为基本行距,另一个就是因子,可以理解成我们经常说的几倍行距。
关于latex的行距机制:
每一行都有一条 baseline, 同一段落中相邻两行之间的 baseline 的间距称为行距 (linespace). 一般来说,最终决定两条 baseline 之间的 linespace 距离的,是 LaTeX 的宏 \baselineskip 之中。也就是说,这个长度值,将会是一般情况下的两条 baseline 之间的距离,也就是我们最终的行距。
显然行距应当随着字号的大小变化;若不然,则对于给定的行距数值,较大字号的内容部分显得拥挤不堪。LaTeX 中的字号存储在内部宏 \f@size之中,而内部宏 \f@baselineskip 则记录了行距中和字号相关的部分。这个宏当中,它的单位和字号的单位一样,都是 pt ( 1pt = 1/72.27 inch ). LaTeX 的默认情况下,\f@baselineskip 的值是当前 \f@size 的 1.2 倍——例如,当\f@size 为 10pt 时,\f@baselineskip 的值为 12pt.
为了统一对不同字号的内容进行行距的调整,引入了因子的概念,这是一个数值(而不是长度),储存在 \f@linespread 这个宏里面。这是一个与字号无关的值,在 article 文档类中它默认是 1, 在 ctexart 中默认是 1.3. 通常我们修改行距,都是修改这个因子,而不动前段叙述的基础行距。因此就有必要将因子存储在一个外部宏(没有 @ 的宏)之中,它是\baselinestretch. 于是我们可以大致地认为,\f@linespread 和 \baselinestretch是一回事。
因此对于article文档类
行 距 = 基 础 行 距 ( 1.2 倍 字 体 大 小 ) ( b a s e l i n e s k i p 默 认 1.2 ) ∗ 因 子 ( 与 字 体 无 关 ) ( l i n e s p r e a d 、 b a s e l i n e s t r e t c h 默 认 1 ) 行距=基础行距(1.2倍字体大小)(baselineskip默认1.2) *\\ 因子(与字体无关)(linespread、baselinestretch默认1) 行距=基础行距(1.2倍字体大小)(baselineskip默认1.2)∗因子(与字体无关)(linespread、baselinestretch默认1)
关于行距的具体设置
% 全局设置,在导言区
\linespread{1.5} %全局设置1.5倍行距
%局部设置,在正文区
{\linespread{1.5} \selectfont content} %selectfont使改动立即生效
%注意linespread这个内部宏与baselinestretch这个外部宏的区别,修改内部宏在更改字体后失效
word最好用的当然是样式了,一般论文排版时,都要先按照要求设置各种样式,然后直接使用。latex中有chapter、section、subsection等章节样式,但是如何像word那样按照自己要求的改呢?
在ctex宏包下我们可以使用texset命令设置,对于上述各种章节名称,都有其下属性进行设置。
%下面三种命令的作用相同
\CTEXset[name={第,章}, number=\chinese{section}, format=\bfseries]{section}
\ctexset={
section = {
name={第, 章},
number=\chinese{section},
format=\bfseries
}
}
\ctexset={
section/name = {第, 章},
section/number = \chinese{section},
section/format = \bfseries
}
各个属性的具体设置内容,这里只列举一下section的默认设置,触类旁通。
属性 | 默认值 |
---|---|
name | {} |
number | \arabic{section} |
format | \Large \bfseries |
aftername | \quad |
beforskip | 3.5ex plus 1ex minus .2ex |
afterskip | 2.3ex plus .2ex |
未列在内 | {} |
搞不清楚,我的电脑用不了上面的命令,因此换了条路,titlesec宏包主要包含下面两个命令。
titlesec的使用方法如下:
%使用titlesec配置了ctex默认的section格式
\usepackage{titlesec}
%\titleformat{command}[shape]{format}{label}{sep}{before-code}[after-code]
\titleformat{\section}{\Large \bfseries}{\arabic{section}}{1em}{}
%\titlespacing{command}{left}{before-sep}{after-sep}[right-sep]
\titlespacing{\section}{0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
word的超链接只需要选中,然后右键选择即可。latex的超链接需要使用 h y p e r r e f hyperref hyperref宏包。
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\href{https://www.baidu.com}{baidu}
即在A处引用B处。latex可以在一些位置设置标签 \label{标签A},然后在其他地方引用。
使用\ref 和\pageref可以引用此处以及页码,使用如下:
word中的图片直接复制粘贴就好,latex需要调用graphicx宏包进行图片插入,如果需要几张图列在一起组成图片阵列,则需要另调用subfigure宏包。
使用代码插入图片是需要图片的存储路径的,如果某文档所需要的图片都存放在某文件夹下,可以用命令\graphicspath{path} 进行设置,而不用以后每次都输入路径,path可以用逗号分隔开多个路径。插入图片需要使用\includegraphics[parameter]{文件名},其中文件名在不冲突的情况下可以不用输入后缀。
优先级依次降低,一般地,我们直接一次性写上htbp即可。实例如下:
\begin{figure}[htbp]
\centering % 图片居中
\subfigure[BN过程示意图]{ %子图起名
\includegraphics[width=5cm, height=4cm]{BN.png}}
\hspace{10pt} %两个字图间横向隔开10pt
\subfigure[BN参数计算]{
\includegraphics[width=5cm, height=4cm]{BNcode.jpg}}
\caption*{image001} %整个图起名
\label{fig:subfig} %定义标签
\end{figure}
word的表格即可以直接插入,也可以复制excel的数据进行粘贴。latex的表格需要调用tabular宏包。其命令格式如下:
\begin{tabular}{}
& & ... \\
\hiline
& & ... \\
\end{tabular}
修改列宽可以在参数中设置,如果要修改行宽,则需要在表格前进行设置
\renewcommand \arraystretch{1.8} %修改数字得到所需行宽
另外绘制竖线也可以定义参数,绘制横线则需要在对应位置使用\hline命令
论文中常用三线表格,当然可以通过更改hline的宽度进行设置,也可以使用booktabs宏包
word中列表当有1或者一之后回车,从而生成有序列表,或者使用点、星等生成无序列表。latex直接在正文区开始enumerate或者itemize环境即可。实例如下:
代码块在正式论文不怎么贴,在平时作业上可不少。word在这块不是很友好,latex通过调用listings宏包进行代码块设置。这里列举了常用的listings设置选项,并进行调用。
% 导言区
\usepackage{listings}
\lstset{ %设置代码块
basicstyle=\footnotesize\ttfamily,% 基本风格
numbers=left, % 行号
numbersep=10pt, % 行号间隔
tabsize=4, % 缩进
extendedchars=true, % 扩展符号
backgroundcolor=\color[RGB]{245,245,244}, % 设定背景颜色
keywordstyle=\color{blue}, % 设定关键字颜色
numberstyle=\footnotesize\color{gray}, % 设定行号格式
commentstyle=\it\color[RGB]{100, 200, 150}, % 设置代码注释的格式
stringstyle=\color{red}, %设置字符串颜色
breaklines=true, % 自动换行
language=python,
frame=leftline, % 框架左边竖线
xleftmargin=30pt, % 竖线左边间距
showspaces=false, % 空格字符加下划线
showstringspaces=false,% 字符串中的空格加下划线
showtabs=false, % 字符串中的tab加下划线
}
% 正文区
\begin{lstlisting}[language=python]
#!/usr/bin/env python
print('Hello world!')
\end{lstlisting}
latex的公式需要调用amsmath宏包,这里涉及公式排版、常用希腊字母表示、常用数学符号表示,因为它与markdown几乎相同,因此将在其他总结中介绍。
在word中参考文献是个挺费劲的活,在latex通过建立ref.bib文件,在文件内输入参考文献,然后在正文相应位置使用\cite{名}即可完成一次定义,多次使用。bib格式的参考文献在谷歌学术等学术网站都有相应格式的文件,直接复制然后粘贴到bib文件中即可,不用管排列顺序,后续在正文参考文献中的顺序将根据bibliographystyle{style}进行设置,每个style对应不同的排序规则。
在导言区设置style,然后在正文最后插入\bibliography{ref}即可,ref为bib文件名,括号内可用逗号同时引用多个bib文件,实例如下:
\bibliographystyle{unsrt}
\begin{document}
这部分请用高度概括的语言说明所研究问题\cite{ShafieeFast},采取的解决手段。
\newpage
\bibliography{refs}
\end{document}
% refs.bib bib文件
@article{ShafieeFast,
title={Fast YOLO: A Fast You Only Look Once System for Real-time Embedded Object Detection in Video},
author={Shafiee, Mohammad Javad and Chywl, Brendan and Li, Francis and Wong, Alexander},
}
需要综合运用上述方法,并设置cls、cfg等文件,将在另一篇博客中进行说明。
知道了对应word任务的常用宏包,我们以后在使用过程中可以通过调用终端或cmd学习tex的官方文档或者学习教程。
%终端或cmd下
texdoc ctex %中文排版说明
texdoc lshort-zh %一份不太短的latex教程
[1] Latex入门(刘海洋)
[2] Latex排版全解
[3] 一份不太短的Latex教程
[4] Latex的行距机制