的笔记

安装

http://tug.org/texlive/

中文

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}

\begin{document}
文章内容。
\end{document}

简单版

\documentclass[UTF8]{ctexart}
\begin{document}
中文
\end{document}

输入字母

image-20190106140726422

image-20190106140737724

这表示左边的字母, 可以用右边的 \X 来生成.

image-20190106140908194

同时输入多种语言的字母

\usepackage[greek, english]{babel}

然后就可以这样子输出德国的abcdef了:

\textgreek{abcdef}

demo

image-20190106141238239

取消连字写法

\documentclass[12pt]{article}
\usepackage[greek,english]{babel}

\begin{document}


shelfful shelf{}ful shelf\/ful

\end{document}

image-20190106141756534

可以注意到上面红色下划线的区别

单引号与双引号连续的情况

\documentclass[12pt]{article}
\usepackage[greek,english]{babel}

\begin{document}

say:“\,‘hello’ world”

\end{document}

即在双引号与单引号之间加上 \,

image-20190106142639088

西文省略号

\ldots
或
\dots

image-20190110110437407

标点符号风格切换

好像Mac版本默认不支持这个宏, 要另外安装?

\punctstyle{quanjiao}
\punctstyle{banjiao}
\punctstyle{kaiming}
\punctstyle{hangmobanjiao}
\punctstyle{plain}

空行与空格

多个空格与一个空格的功能相同.

单个换行也被看做是一个空格.

以字母命名的宏, 后面空格会被忽略. 如果确实需要空格, 可以使用 \空格 来输入. 也可以使用空的分组 \xx宏命令{}空格

ties

禁止在这种空格之间分行. 用 ~ 表示. 如:

Question~1

西文正确换行

在逗号, 句号, 分号等标点后面应该加空格. 以保证正确的间距和正确的换行.

因为标点后如果没有空格, 就不能换行.

中文与西文混合

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}

\begin{document}
中文和English混合
\end{document}

汉字和其他内容之间如果空格, xeCJK 宏包会自动添加.

image-20190110114616292

局部禁止这种空格

可以使用 \mbox宏. 如

\mbox{中文和}English不同于中文和English这个

image-20190110114844969

全局禁止这种自动添加空格

\CJKsetecglue{}

image-20190110115109795

可以看到, 默认不添加空格了. 除非自己显式加上.

phantom 空格

这个宏产生与参数一样大小的空盒子, 没有内容.

image-20190110115609080

  • 水平方向 : \hphantom{}
  • 垂直方向 : \vphantom{}

分段

连续两个换行表示分段.

也可以用 \par 命令产生一次分段效果.

另起一行, 但不分段: \\ 命令, 上一行保持原来的样子, 然后另起一行. 它有一个可选参数, 表示换行后增加的额外垂直间距. 如 \\[2cm] 如果 \\ 后要输出 [] 则可以这样子: \\{} []

\linebreak 指定一行的断点, 上一行仍按完整一行散开对齐.(一般不会在行文中用到)

image-20190110120829000

TeX 中不同的数字形式

image-20190110121925148

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}


\begin{document}

\symbol{90}

% 英文状态下的双引号. shift + (enter左边那个键)
\symbol{"5A}

% 英文状态下的单绰号, 即 enter 键左边那个健 
\symbol{'132}

% 英文状态下的反单引号, 即 esc 下面那个键
\symbol{`Z}

\end{document}

image-20190110122613280

字体

family

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}


\begin{document}
% 声明式为 \rmfamily
\textrm{你好} 

% 声明式为 \sffamily
\textsf{你好}

% 声明式为 \ttfamily
\texttt{你好}

\end{document}

image-20190110123037864

shape

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}


\begin{document}
% 声明式为 \upshape
\textup{hello world}

% 声明式为 \itshape
\textit{hello world}

% 声明式为 \slshape
\textsl{hello world}

% 声明式为 \scshape
\textsc{hello world}

\end{document}

image-20190110123437315

series

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}


\begin{document}

% 声明式为 \mdseries
\textmd{hello world}

% 声明式为 \bfseries
\textbf{hello world}

\end{document}

image-20190110123617866

完整

\fontencoding{编码}
\fontfamily{family名字}
\fontseries{series名字}
\fontshape{形状}
\fontsize{大小}{基本行距}
% 使生效
\selectfont

\usefont{编码}{family}{series}{shape}

定义新字体family

\newfontfamily\your_new_family_command[可选项]{字体名}
如

\newfontfamily\lucidasans{Lucida Sans}
使用
\lucidasans{This is Lucida Sans.}

设置英文字体

\usepackage{fontspec}
% 对应 \rmfamily 时使用的字体
\setmainfont{Times New Roman}

% 对应 \sffamily 时使用的字体
\setsansfont{Verdana}

% 对应 \ttfamily 时使用的字体
\setmonofont{Courier New}

设置中文字体


\setCJKmainfont[可选项]{字体名}

\setCJKsansfont[可选项]{字体名}

\setCJKmonofont[可选项]{字体名}

\setCJKfamilyfont{中文字体family}[可选项]{字体名}

查找字体

只查找中文字体:
在Bash中直接输入:

fc-list :lang=zh

查找矢量字体:
fc-list :outline

输出字体的符号表

这对于使用 \symbol 命令时查找符号代码特别有用.

\usepackage{fonttable}
\fonttable{字体名}
\xfonttable{编码}{family}{series}{形状}

例子

\documentclass[UTF8]{ctexart}
\usepackage{fonttable}


\begin{document}

\fonttable{MnSymbolA5}
\xfonttable{OT1}{MnSymbolA5}{m}{n}


\end{document}

结果

image-20190110145006403

样式

强调

\emph{要强调的内容}

image-20190110145336616

下划线

\documentclass[UTF8,nofonts]{ctexart}
\setCJKmainfont[BoldFont=STHeiti,ItalicFont=STKaiti]{STSong}
\setCJKsansfont[BoldFont=STHeiti]{STXihei}
\setCJKmonofont{STFangsong}

\begin{document}
\underline{你好} 世界
\end{document}

image-20190110145533874

注意, \underline 的下画线部分不能换行. 可以用 ulem 包替换处理

ulem 包

\usepakcage{ulem}

下划线 : \uline{内容}

强调 \emph{内容}

中文的类似处理

\usepackage{CJKfntef}

使用:
\CJKunderdot{下加点} \\
\CJKunderline{下划线} \\
\CJKunderdblline{双下划线} \\
\CJKunderwave{下波浪线} \\
\CJKsout{删除线} \\
\CJKxout{涂改删除线} \\

image-20190110150454069

字号

\tiny{非常小号}
\scriptsize{脚本大小}
\footnotesize{脚注大小}
\small{小号}
\normalsize{普通大小}
\large{大号}
\Large{大大号}
\LARGE{大大大号}
\huge{巨大号}
\Huge{超巨大号}

image-20190110151248827

明确使用字号大小, 可以使用 ctex 或 ctexart 包提供的 \zihao 命令设置. 如

% 使用 5 号大小
\zihao{5}

距离

一个完整的距离表示, 必须是 数字+单位 例如 1cm

行距

% 行距 = 因子 * 基本行距, 可以通过下面来设置因子大小. 默认为1, 即行距是字号大小的1.2倍.
\linespread{因子}

setspace 包

image-20190110151950893

水平间距

不可换行水平间距

\thinspace 或 \,
\negthinspace 或 \!
\enspace
\nobreakspace 或 ~

image-20190110152543890

可换行水平间距

\quad
\qquad
\enskip
\空格

image-20190110152555643

指定距离的水平间距

\hspace{距离}

例如
\hspace{1cm}

\hspace 是可断行的. 作用是分隔左右的内容. 某些只有一边有内容的, 则默认会忽略. 这时可以用 \hspace*{距离} 来强制显示

image-20190110152952086

弹性长度

\hspace{普通长度 plus <可伸长长度> minus <可缩短长度>}

填充长度

你好\hspace{\fill}世界\hfill 你好

上面的会将那些内容填充好一行

\hspace{\fill} 的缩写是 \hfill

\stretch{倍数} 表示弹性的力度. \stretch{2} 表示2倍的 \fill

填充样式
% 使用横线填充
\hrulefill 

% 使用点填充
\dotfill

box 盒子

一个字符, 一行文字, 一个页面, 一张表格在TeX中都是一个盒子.

mbox

\mbox{内容}

产生一个盒子, 左右模式排列. 内容不允许断行.

makebox

\makebox[宽度][位置]{内容}

位置 : 可以为

  • c : 居中
  • l : 居左
  • r : 居右
  • s : 分散

重叠

\makebox[0pt][l]{word}文字

专门的重叠命令

% 向左侧重叠
\llap

% 向右侧重叠
\rlap

边框box

\fbox
\framebox

\mbox , \makebox 类似

设置边框与内容的距离

\setlength{\fboxsep}{0pt} \fbox{content here}

默认\fboxsep3pt

设置边框的粗细 \fboxrule{0.4pt}

保存为变量

% 定义 \mybox 命令
\newsavebox{\mybox}

% 设置样子和内容
\sbox{\mybox}{text text}
或
\savebox{\mybox}[宽度][对齐]{内容}

% 使用
\usebox{\mybox} 

段落

% 分段命令
\par 

中文环境中, 每个自然段有一个固定的缩进, 长度由变量 \parindent 控制.

在英文标准文档类 article 中, 每个章节第一段是不缩进的.(可以使用 indentfirst 宏包来开启 \usepackage{indentfirst})

在中文标准文档类 ctexart 中, 则每段缩进, 长度为两个汉字宽.

如果要临时禁用某一段的缩进, 可以在段前使用 \noindent 命令. 显式使用缩进, 可以用 \indent 命令(产生一个与 \parindent 长度的缩进).

段与段之间的垂直距离

这是由 \parskip 控制. 默认是弹性长度 0pt plus 1pt

\setlength{\parskip}{0pt}

段落对齐

默认是两端对齐.

% 左对齐. ragged right 意思为右边参差不齐, 即左对齐.
\raggedright

% 右对齐. 排版签名, 日期等
\raggedleft

% 居中
\centering

对齐环境

  • flushleft : 左对齐环境
  • flushright : 右对齐环境
  • center : 居中对齐

    \begin{center}
    \end{center}
    

复杂的段落排版

\parshape

悬挂缩进

\hangindent=5pc \hangafter=-2
内容...
  • \hangindent : 正数表示作用于左侧. 负数表示作用于右侧.
  • \hangafter : 正数表示作用于N行之后. 负数表示作用于N行之前.

这两个命令, 只对当前段起作用.

首字下沉

\usepackage{lettrine}

\lettrine{T}{the} Linux System

image-20190110170017273

段落形状

\usepackage{shapepar}

% 心形的段落形状
\heartpar{
綠草蒼蒼 白霧茫茫 有位佳人 在水一方
綠草萋萋 白霧迷離 有位佳人 靠水而居
我願逆流而上 依偎在她身旁 無奈前有險灘 道路又遠又長
我願順流而下 找尋她的方向 卻見依稀彷彿 她在水的中央
我願逆流而上 與她輕言細語 無奈前有險灘 道路曲折無已
我願順流而下 找尋她的蹤跡 卻見彷彿依稀 她在水中佇立
綠草蒼蒼 白霧茫茫 有位佳人 在水一方
}

image-20190110170337102

文本环境

引用环境 :

% quote 环境在段前没有首行的缩进, 每段话的左右边距比正文大. 适用于小段内容的引用
\begin{quote}
引用内容
\end{quote}

% quotation , 每段首行缩进. 适用多段的文字引用
\begin{quotation}
\end{quotation}

诗歌环境 :

\begin{verse}
诗歌内容
\end{verse}

摘要环境 :

\begin{abstract}
文章摘要...
\end{abstract}

摘要的标题由 \abstractname 定义. 英文默认为 Abstract , 中文默认为 摘要

列表环境

编号 :

\begin{enumerate}
	\item 选项1
	\item 选项2
	...
\end{enumerate}

不编号 :

\begin{itemize}
	\item 选项1
	\item 选项2
    ...
\end{itemize}

关键字 :

\begin{description}
	\item[关键字1] 描述
	\item[关键字2] 描述	
	...
\end{description}

可以嵌套使用. (至多4层)

定理类环境

它会产生一个标题, 编号和特定格式的文本.

\newtheorem{thm}{定理}

\begin{thm}
直角三角形斜边的平方等于两腰的平方和
\end{thm}

\begin{thm}[勾股定理]
直角三角形斜边的平方等于两腰的平方和
\end{thm}

\newtheorm{thm}{定理} 表示定义了一个名为 thm 的定理类环境, 标题为 定理 .

\begin{thm}[勾股定理] 使用的时候, 有一个可选的小标题, 这里为 勾股定理

image-20190110172440946

计数器参数

\newtheorem{thm}{定理}[chapter] 

上面的表示按章节来编号

自定义定理类环境格式

使用 theorem 包来设置各种参数

抄录和代码环境

抄录(原样输出):

\verb<符号>抄录内容<符号>

例如

\verb"\Latex"

使空格可见

\verb*<符号>内容<符号>

例如

\verb*"\Latex 你好"

image-20190110173639634

大段摘抄

\begin{verbatim}
#!/bin/bash
xxxx
\end{verbatim}

空格可见:

\begin{verbatim*}
#!/bin/bash
xxxx
\end{verbatim*}

高亮程序代码

使用 listings 宏包. 其他的参数查看文档. 最常用的就是设置 language 语言了.

\usepackage{listings}


\begin{lstlisting}[language=C]
/** hello.c */
#include <stdio.h>
int main() {
    printf("Hello world\n");
    return 0;
}
\end{lstlisting}

image-20190110174342462

tabbing 环境

排版制表位, 即让不同的行在指定的地方对齐.

这该环境中, 行与行之间用 \\ 分隔. 使用 \= 来设置制表位. 使用 \> 可以跳到下一个前面已经设置的制表位.

\begin{tabbing}
格式\hspace{3em} \= 作者 \\
Plain \Tex \> 高德纳
\LaTeX \> Leslie Lamport
\end{tabbing}

image-20190110175009258

\kill 会忽略当前行的内容, 但保留制表的位置.

太复杂话, 可以用 clrscode 宏包 或 algorithm2ealgorithmicx宏包来处理

脚注与边注

例如\footnote{这是一个脚注}

它会出现在页面底部. 以 \footnotesize 的字号输出.

image-20190110180301551

边注

例如\marginpar{这是一个边注} 

image-20190110180643832

垂直间距与垂直盒子

\vspace{长度}
\vspace*{长度}

垂直盒子

\parbox[位置][高度][内容 位置]{宽度}{盒子内容}

例如
你好\parbox{2em}{你好世界}

image-20190110181211797

三个参数分别为

  • 盒子的基线位置
  • 盒子的高度
  • 盒子内容在盒子内的位置

位置参数可以用

  • c : 居中
  • t : 顶
  • b : 底

默认为居中.

内容位置可以为:

  • c
  • t
  • b
  • s : 垂直分散对齐

标尺 rule 盒子

它是一个矩形盒子, 通常使用一个细长的标尺盒子画线.

\rule[升高距离]{宽度}{高度}

升高距离默认为 0pt. 不同的大小效果如下:

\rule[-10pt]{5pt}{5pt}你好世界 \rule[-10pt]{5pt}{5pt}

\rule[0pt]{5pt}{5pt}你好世界 \rule[0pt]{5pt}{5pt}

\rule[10pt]{5pt}{5pt}你好世界\rule[10pt]{5pt}{5pt}

image-20190110182216238

升降的盒子

\raisebox{距离}[高度][深度]{内容}

距离为正(例如 0.16em), 表示盒子里面的内容上升, 距离为负(例如 -0.16em)表示下降.

层次

标题和标题页

\title{标题 \\换行内容}
\author{作者\\工作单位及联系方式 \and 第二个作者\\工作单位有联系方式}
\date{日期}
% 表示今天, 英文为 April 28, 2013. 中文格式为 2013年4月28日
\date{\today}

使用 ctex 宏包可以用 \CTEXoptions 来设置 \today 的格式. 例如

% 2013年4月28日
\CTEXoptions[today=small]
% 二0一三年四月二十八日
\CTEXoptions[today=big]
% April 28, 2013
\CTEXoptions[today=old]

在声明标题和作者时, 可以使用一种特殊的脚注 \thanks{内容}

输出标题 \maketitle . 通常是 document 环境后面的第一个命令.

独立一张标题页:

\begin{titlepage}
这里可以自定义标题页的格式
\end{titlepage}

可以使用 titling 宏包来详细设置这些. 适合模板作者用.

划分章节

层次 名称 命令 说明
-1 part 部分 \part 可选最高层
0 chapter 章节 \chapter report, book 之类的最高层
1 section \section article 类高最层
2 subsection \subsection 小节
3 subsubsection \subsubsection 小小节, 默认不编号, 不编目录
4 paragraph \paragraph 默认不编号, 不编目录
5 subparagraph \subparagraph 默认不编号, 不编目录

命令后带 * 表示不编号, 不编目录. 例如 \chapter*

正文的标题与目录的标题不同的编排. 正文使用长标题, 目录使用短标题. 则可以:

\chapter[你好]{你好:这是我的世界}

控制编号的层次

它是由计数器 secumdepth 控制(除 part 外). 默认为 3.

附录

% 附录的开始
\appendix
\chapter{附录章节}
...

对于 book 类

% 正文前的资料, 这部分不编号
\frontmatter
\chapter{序}

% 正文的主要部分
\mainmatter
\chapter{第一章}

% 附加材料, 这部分不编号
\backmatter
chapter{进一步参考资料}

多文件编译

% 文件名不用带 .tex 扩展名. 通常是作为 chapter .
% 即文件中的内容是
%
% \chapter{第一章}
% .....
%
% 会在前后自动使用 \clearpage 或 \cleardoublepage 另起新页
\include{文件名}

% 或使用 input. 文件名可以带也可以不带扩展名.
% 这种是直接把文件的内容复制到当前位置
\input{文件名}

文档类

标准的英文文档类

  • article
  • report
  • book

\documentclass 标准选项. 这是全局设置的. 不仅会影响document 的内容, 还会影响所使用的宏包.

image-20190110190952617

ctex 宏包(中文环境)提供了三个对应标准文档类的

  • ctexart
  • ctexrep
  • ctexbok

ctex 支持的选项

image-20190110191315230

image-20190110191330656

页面尺寸与 geometry

这个在详细设置页面时使用 geometry 宏包来处理. 可搜索下资料

自动化工具

生成章节目录 \tableofcontents 连续两次编译文档后即可生成…

交叉引用

它的使用分成两部分(也要至少编译两次)

  • 定义标签 : \label{标签名}
  • 引用标签 : \ref{标签}\pagere{标签} . 分别表示对象的编号和所在页码

nameref 宏包可以引用章节标题等.

电子文档与超链接

比如PDF中的文档目录标签和超链接功能. 这些可由 hyperref 宏包完成.

\usepackage{hyperref}
% 如果是 ctex 宏包的话, 可以直接加 hyperref 选项
\documentclass[hyperref,UTF8]{ctexart}

引入之后, 编译文档时, 会自动根据章节生成目录结构的PDF文档标签, 并且目录和交叉引用会自动生成超链接了.

注意, 至少要编译两次文档.

参考文献与BIBTEX

文献数据库是以 .bib 结尾的文本文件, 内容是许多文献条目.如

# tex.bib中的某一条条目数据
@BOOK{引用名字,
    title={标题},
    publisher={出版商, 如 人民出版社},
    year={出版年份, 如 2004},
    author={作者},
    series={类别, 如计算机/编程},
    address={地址},
    edition={第几版}
}

在文档 *.tex 源文件中, 要做好下面三件事来引用文献

  1. 使用 \bibiographystyle 命令设定参考文献的格式.
    • plain : 按作者, 日期, 标题排序
    • unsrt : 不排序, 保持引用的次序
    • alpha : 使用一种三字母缩写的方式编号并按作者排序
    • abbrv : 与 plain 基本相同, 只是定义了一些缩写
  2. 在正方文中使用 \cite 命令引用需要的文献, 或是使用 \nocite 命令指明不引用但仍需要列出的文献标签. \cite 引用的位置会出现文献的编号, 同时提示Latex列出所引用的文献. 如果想列出数据库中所有的文献, 可以用 \nocite{*} 命令. (一般用于一篇文章编写的小型文献数据库)
  3. 使用 \bibliography 命令指明要使用的文献数据库. LaTeX 会在这条命令的位置, 插入参考文献列表. 指定的数据库文件时, 不带 .bib 后缀. 可以同时从多个文献数据库中引用, 如 \bibliography{a,b,c}

要最终生成, 则要这样子

xelatex doc.tex
bibtex doc.aux
xelatex doc.tex
xelatex doc.tex

jabref

这是一个开源的, 专门用来处理 BIBTEX 文献数据库的管理软件

制作索引

  1. 导言里使用 \makeindex 指令, 开启索引文件输出
  2. 导言里使用 makeidx 宏包, 开启索引列表排版功能
  3. 正文中需要索引的关键字处使用 \index 命令, 生成索引项
  4. 在需要生成索引的地方(通常是文档尾部), 使用 \printindex 命令, 输出处理好的索引列表

一个示例内容

\documentclass[UTF8]{ctexart}
\usepackage{makeidx}
\makeindex

\begin{document}

\section{勾股定理}

勾股定理在西方称为毕达哥拉斯定理 (Pythagoras's theorem).
\index{Pythagoras}

在中国常称为商高定理 \index{商高}

\printindex

\end{document}

image-20190111111139519

最终编译(foo.tex)

xelatex foo
makeindex foo
xelatex foo

可以像这样子 \index{编程!Java} 进行分层索引.

数学公式

有两种

  • inline : 在行内显示. 也称为 intext. 使用 $....$ 表示. 或 \(...\). 或 \begin{math}....\end{math}
  • displayed : 单独占据整行显示出来的. 使用 $$...$$ 表示. 或 \[....\]\begin{displaymath}....\end{displaymath}

上面的是不显示编号的. 若想显示编号, 可以用 \begin{equation}.....\end{equation}

最常用 amsmath 宏包来排版数学公式.

上下标

^{上标内容}
_{下标内容}

角度

\circ

上下画线与花括号

\overline{a+b} 
\underline{a}

上下花括号
\overbrace{a+b}
\underbrace{a+b+c}

分式

\frac{分子}{分母}

如
$$ \frac{1}{100} $$

image-20190111113605480

根式

\sqrt[开方次数]{开方数}

图表

tabulararray 环境