学术写作利器 —— LaTeX 入门笔记整理

| 三江小渡 | tutorial 转载

LaTex 科学排版LaTex 科学排版

LaTeX 入门教程(上)

比 Word 更适合学术写作的编纂语言

Credit:讲座是敝系的几个技术宅办的,作者只负责记录和整理。后面的更新是个人心得。

写这篇日志的初衷是小圈子分享和个人心得记录,适合完全不了解 tex 的入门者阅读,我的水平有限所以肯定有所疏漏,欢迎提出建议。具体使用什么写作工具,还要看写作内容和个人习惯,毕竟优化工作效率才是最终目标 :) 有兴趣的可以翻翻推荐语,有不少高人给出了相关资源和意见。

LaTeX 是专为学术写作开发的语言和编纂程序,拥有强大的 package 资源,这意味着用 LaTeX 写作可以避免 Word 带来的令人头疼的排版问题,而且世界上有很多人已经写好了针对各种写作格式的 coding package,我们只需要套用这些 package 就行了。很多主流学术期刊都有自己的 LaTeX 模板,所以要把同一篇文章投给不同期刊的话,只要套用相应的 package 就可以了,比起在 word 里面一点点调整页边距行距引用格式之类的细节,LaTeX 的效率显然要高得多。

第一眼看上去,LaTex 的语法也许有些吓人,但是只要你熟悉了基本的编纂模式,就会发现它的强大之处。

第一部分:新手资源

线上编纂

LaTeX可以进行线上编纂,好处是能够随时自动保存工作进度和数据,而且可以多人合作编写文档。

常用的 LaTex online compiler 基本就是 sharelatex.comwritelatex.com 这两个,需要注册,基本账户免费。

本地编纂

如果希望用 LaTeX Compiler 在本地电脑工作,则需要以下软件:

For Windows:

For Mac:

  • MacTeX
  • TexMaker,地址同 Windows.

之所以都需要两个软件是因为它们各自的作用不同:MikTex 是 package 管理软件,而 TexMaker 是用这些 package 和你自己的文字来生成最终 PDF 文件的软件。package 的作用会在下面专门解释。

下面以 sharelatex.com 的界面为例子演示 LaTeX 的基本编纂规则和 package 的作用。

第二部分:文档编写基础

基本界面

打开 sharelatex.com 注册账号之后,点击右上角的 New Project,在下拉菜单中选择 example project,随便起个名字,出现这个 Metro 风格的界面。

ShareLaTeX基本界面

如果图太小看不清请戳大图。从左到右的三竖栏分别是文件相关信息、编码栏和文件生成栏,暂时叫它们 A\B\C 栏,其中 B 栏是进行文档编写的主要工作区。B 栏中的改动在点击 C 栏的 Recompile 之后才能看到生成文件的相应改动。

B 栏中蓝色的字符是 function,function 后面 {} 的里面是 argument。LaTeX 的 function 使用 “\” 符号表示开头, “%” 表示 comment out 即不执行此行代码。有编程知识的同学都知道这些语句的意义是把特定的 argument 插入到 function 表达式中,LaTeX 也不例外。

基本 function 解释

\documentclass{article} 的意思是这篇文档的类型是学术文章,除此之外也有 book,booklet 等其他出版物类型,这一句限定了排版能够使用的格式,比如说如果类型是 article,那么排版就可以用 APA/Chicago/MLA 等版式,而不是专用于 booklet 的一些版式;

\userpackage[utf8]{inputenc} 这一行不用改动,只是定义文档的编码方式;

\title 是整个文档的标题,会自动居中,可以试着把例子中的标题改成其他标题,再点击 Recompile,可以看到生成了带新标题的文件。

再往下,\author\date 是文档的作者和日期信息,如果想让 date 自动显示今天的日期,就把这一行改为 \date{\today}

下面两行 \usepackage 规定了文档使用的文字排版是 natbib,图表排版是 graphicx。natbib 在理科写作中比较常用,如果要换成文科生常用格式比如 APA 的话,把上面一行改成:\usepackage{apacite}

这里就要讲到 package 的作用了。package 类似于一个插件,能够把各种事先设定好的标准排版方式、图表排列方式、公式生成方式等等直接插入文档中,免去了手动调整这些参数的麻烦。很多常用的 package 都有高人写好的代码,我们只要拿过来用就行了,比用 word 调整页边距、页码等等要方便得多。apacite 就算是一个广泛使用的 package,我们学校也有专门的机构负责编写论文排版的 package,我们只要在 \usepackage{} 中把这些 package 作为 argument 插入 {} 就可以了。

如果需要的话,我们可以在下一行加一个 function: \tableofcontents,然后点击 recompile,可以看到 latex 会自动在标题后面插入目录,而且目录内容会根据后面的正文小标题改变。还可以在 \tableofcontents 后面加上另一个function:\pagebreak,这样文档的正文就会另起一页。\pagebreak 类似于 word 里面的分页符,在任何需要分页的地方都可以使用。

\begin{document} 是正文正式的开始标志,相应的结束标志 \end{document} 则在文档最后。\end{document} 后面的任何内容都不会在 compile 里面显示出来,所以如果我们需要只把编码的一部分生成文档,只要在这部分的结束处输入 \end{document} 就行了。\begin\end 的命令也适用于标记文中插入的图表的起始和结束。

很多时候我们还需要在文章前面加上 abstract,方法也很简单,只要像下面这样进行编码:

\begin{document}
\maketitle
\begin{abstract}
(这里放置 abstract 的文字)
\end{abstract}

就可以了。

注意 \maketitle 这一行一定要在 \begin{document} 的下面,否则 LaTeX 会判定为语法错误。\maketitle 命令的作用是把标题信息(也就是 \begin{document} 之前的 \title\author\date 等)显示出来,如果 comment out 或者删去 \maketitle 这一行,这些标题信息将不会显示在 C 栏的 PDF 中。当然,如果你正好不需要显示标题,就可以删去这个命令。

\section{introduction} 是对文档部分的划分,括号里是这部分的名称,latex 会生成具体的部分数字编号。子分层的命令是 \subsection。一般来说 latex 不允许过多子分层,比如说在 \usepackage{apacite} 规则中,只允许两个子分层也就是 \subsubsection{}

了解了以上基础知识之后,就可以进行最基本的 LaTeX 文档编写了。下面几部分要讲的是如何插入引用和生成参考书目。

第三部分:引用

Google Scholar 和 LaTeX 的协作

打开 Google Scholar 首页,点击右上角设置,将“参考书目管理软件”设置为“显示导入 BibTex 的链接”。然后随便搜索一篇文章,点击搜索结果下面的“导入 BibTex”,可以看到几行代码,这就是 LaTeX 能够识别的 bibliography。

设置导入 BibTeX 之后的 Google Scholar 条目设置导入 BibTeX 之后的 Google Scholar 条目

点击“导入 BibTex”之后的代码点击“导入 BibTex”之后的代码

把这几行代码复制粘贴到 sharelatex 界面 A 栏的 reference.bib 中:

讲代码复制到 reference.bib 里面讲代码复制到 reference.bib 里面

但是如果这时候点 recompile,会看到生成的 reference 里并没有新加入的这篇文章,因为我们在正文中还没有引用它。

于是接下来讲一下如何在正文中插入引用。

在正文中插入引用

复制刚才粘贴的代码的第一行中划红线的内容(也就是 BibTeX 自动生成的引用文章代码),然后在正文中需要插入引用的部分插入 \citeA{文章代码},这样就能在正文中引用了。

正文中引用,注意只复制文章代码正文中引用,注意只复制文章代码

这时候再点 recompile,才能看到 reference 中出现了新加的这篇文章。注意:\citeA 是 APA 格式的引用 function,示例文档代码里面的 \citep 是另一种排版格式的引用 function。

在 reference 中,latex 会自动调整文章标题的大小写为只大写首单词的开头字母。如果需要保留文章原标题的大小写格式,就在 reference.bib 里面相应文章标题 title 的两边再加上一个括号 {},比如 title={{A bird’s-eye view of learner CORPUS research}},就可以保留原标题的大小写了。

第四部分:LaTeX 维基百科全书

上面也提到了 LaTeX 的 function 中有很多不同的 package 供选择,那么到哪里去找不同类型的 package 呢?比如说我这篇文章用了 apacite,那如果我下一篇文章要用 MLA 格式,该用什么 package?

LaTeX 的维基页面就提供了这样一个百科全书式的资源,也有 PDF 版可以下载。

页面中详细列出了各部分 function 所能够使用的 package,只要点开目录链接去找到 package 名称就行了。对于本地编纂软件来说,则需要下载 package 之后用 MikTex 来进行管理。

(今天的讲座只讲到了这里,下周继续写)

LaTeX 入门教程(下)

自从写了 LaTeX 教程笔记之后,我试着用 ShareLatex 代替 word 完成了三个 written assignment 和两个 presentation,写作体验和效果都还不错。所以像我一样的文科僧大可不必对写代码这件事感到头疼,比起 HTML/CSS,LaTeX 还算是对新手比较友好的,毕竟很多常用的格式和排版都有写好的 LaTeX package。

下面就以我自己已经完成的一个 assignment 和一个 presentation 作为例子来讲 LaTeX 的具体应用和注意事项。主要涉及的 document type 有 article 和 beamer 两种,主要的功能有

  1. 用 qtree 画树形结构
  2. 用 tabular 做表格
  3. 调整行间距/字体字号/页边距等
  4. beamer(幻灯片)的一些简单排版

实例:用 Beamer 做 presentation

LaTeX 也可以做幻灯片,而且直接保存为 pdf 格式,不用担心 pptx 在不同的电脑上渲染效果不同了。网上有一个流传较广的 Beamer Quick Start,我的 slide 基本上也是照着这个教程做出来的,下文简称为 BQS。另一个 pdf 格式的教程也比较实用。

【PREAMBLE】

首先在 preamble(就是 \begin{document} 前面的那些部分)中定义:\documentclass[xcolor=dvipsnames]{beamer}

其中方括号 [] 里的指令是要求 beamer 使用 xcolor 来生成 dvipsnames 指定的色彩效果。LaTeX 的很多指令都是这个 []{} 的格式,大多数遵循【[] 定义具体参数 - {} 定义上层 argument】的规则,所以这一行的意思是“建立一个颜色可由 dvip 指定的 beamer 文件”。(beamer 自带的 default)

然后下面这几行:

\usecolortheme[named=Maroon]{structure} 
\usetheme{Boadilla} 
\usepackage{helvet}

\usecolortheme 就是来指定 beamer 的颜色是 Maroon,{structure} 的意义我也不清楚,大概是只在 heading 和 title 这些构建 structure 的文字上菜使用自定义颜色的意思。所以可以看到,生成的 slide 中只有标题和页脚等部分才是红色的。

\usetheme 是指定 beamer 的主题,类似 ppt 中的设计模板。BQS 中给出了好几个常用的 theme。需要注意的是有一些不常用的 theme 是不会直接被 sharelatex 识别的,必须和开发者设计的其他的指令配合使用。不过类似 Boadilla,Warsaw,Singapore 和 BQS 里面给的这些 theme 都能被 sharelatex 识别,而且足够应付一般的 presentation 了。
\usepackage{helvet} 用来指定 beamer 使用的字体。beamer 的默认字体是略带圆角的某个字体,如果不喜欢的话就在 preamble 中另外设置,几个比较常用的 helvet (Helvetica),times (Times New Roman),bookman (Bookman Old Style),serif 等等都是不错的选择。字体对应的名称见这里的第48页。

【标题和页眉设置】

\title[Short title of the presentation]{Full title of the presentation}

标题:方括号是缩写,会显示在每一张slide的页脚;大括号里是完整的标题。

\subtitle{subtitle here}

副标题。

\author[John Smith]{John Smith}

演讲者姓名。方括号里的名字会显示在页脚中。

\institute[XX University]{
    M.A. in XXX\\
    XXX University\\
    [1ex]\texttt{example@XXX.edu}
}

演讲者的 affiliation。方括号是页脚内容。大括号中的 \\ 用来分行,[1ex] 用来减小 email 的字号。

\date[March 2013]{\today}

演讲日期。估计都已经摸着规律了,beamer 中 title 这几行,方括号里都是页脚的内容。

【插入新幻灯片】

\begin{document} 之后就是幻灯片正文了。每一张幻灯片的起始和结束用 \begin{frame}\end{frame} 来标示。这两个 tag 之间的代码就是这张幻灯片上的内容。\begin{frame}{slide title} 则可以把 title 直接插入页眉,更符合实际需要;但是相应的 \end{frame} 后面不需要加上 {slide title}。

【插入Bulletinoint】

\begin{itemize}
\item (空一格后输入每个 point 的内容) 
\item (同上)
\item
...
\end{itemize}

【插入数字列表】

\begin{enumerate}
\item
\item
\item
...
\end{enumerate}

(学过HTML的同学可以把 itemize 和 enumerate 理解为 ordered list 和 unordered list)

【分行】

在两行文字中间插入 \par。也可以用一行空白来代替。

需要较大行间距,则可在两行之间插入:

\par
\bigskip

【插入图片】

先把要插入的图片用 A 栏的 upload file 导入。如果 compiler 是 pdfLaTeX 的话,常用图片格式比如 JPG/PNG/BMP 都兼容,如果 compiler 是 LaTeX 则只有 EPS 才能插入。compiler 可在 setting 中设置。

导入之后,输入插入图片的指令 \includegraphics[scale=X]{X.PNG},如下图所示,左边为代码,右边为对应的 slide:

用\includegraphics插入图片(红色划线部分)\includegraphics 插入图片(红色划线部分)

scale 就是图片的缩放,X 一般是个大于0小于1的数字,比如0.6就是原图片缩放百分之六十。{} 里面是图片文件名。(注意:图片文件名中不能有空格,否则 latex 无法识别)

如果需要让图片居中,则需要 \centering 这个命令:

\par
\centering
\includegraphics[] {}
\par

经个人实验得出结论:\par 这个空行命令在这里是必不可少的,因为如果不用 \par 把居中的图片和上下文分隔开的话,上下文靠近图片的部分也会居中。

插入图片的方法是把图片作为 Figure 插入,比如:(建立一个 example file 也能看到类似的例子)

\begin{figure}[h!]
\centering
\includegraphics[scale=1.7]{universe.jpg}
\caption{The Universe}
\label{threadsVsSync}
\end{figure}

这样还能给图片加上 caption,功能更完善一些。

【控制内容显示先后顺序】

LaTeX 也可以实现 powerpoint 那种逐一显示每一项的效果。还是刚才那张图:

用\pause控制内容显示顺序(蓝色划线)\pause 控制内容显示顺序(蓝色划线)

加入 \pause 这个命令后,下面新加入的内容会在一张新的 slide 上显示,播放的时候,配合讲解,可以营造一种“揭晓谜底”“步步推进”的效果。

【插入简单表格】

插入简单表格插入简单表格

图片中代码太小看不清楚所以直接复制在这里:

\begin{frame}{Quantifier and Scope}
The scope of quantifier is directly reflected by the surface structure;
\par
\bigskip
\begin{center}
\begin{tabular}{|c|c|c|c|} \hline
\textsc{Obj} position & Scrambling & Trace & Ambiguity \\ \hline
Spec,TP & A-scrambling   & non-recoverable & unambiguous\\ \hline
Spec,HP & A'-scrambling  & recoverable & ambiguous \\ \hline
\end{tabular}
\end{center}
(cf.23 and 24)
\par
\bigskip
Disambiguation can be reached by inserting a higher adverb such as 'fortunately'.
\end{frame}

关键就是从 \begin{center}\end{center} 之间的这一段代码。

{center} 是表格居中的命令;

\begin{tabular}{|c|c|c|c|} \hline 这一行建立表格的结构。其中第二个 {} 里面有多少个用 “|” 分开的格子,表格就有多少个 column。可以把 “|” 理解为 vertical line,很形象。每个格子里面能出现的字幕只有 r/c/l 三种,分别代表左对齐、居中、右对齐,所以这个表格所有的单元格都是居中对齐的。\hline 是加入一个 horizontal line 也就是分行的命令。

再往下是表格的具体内容:

Spec,TP & A-scrambling & non-recoverable & unambiguous\\ \hline

因为设置了表格有四个 column,所以对应的每一个 row 里面就要用三个 “&” 把四个 column 分隔开。“&” 相当于 “|” 的作用。每一个 row 的结束由 “空格 + \” 标示。最后的 \hline 用来给这一横行下面加上边栏。如果没有 \hline,就没有这一行下面的边栏。
以此类推,最后以下面这段代码结束这个表格。

\end{tabular}
\end{center}

转载 / 三江小渡 2013-02-28 09:00:06