• 第3章:文档元素
• 3.1 章节和目录
• 3.1.1 章节标题
• 一片结构化的、条理清晰的文档一定是层次分明的,通过不同的命令分割为章、节、小节latex的三个标准文档类article、report和book提供了一系列命令,用以划分章节、生成章节标题并自动编号其中\chapter只在book和report文档类有定义
• \chapter{⟨title⟩} \section{⟨title⟩}
\subsection{⟨title⟩} \subsubsection{⟨title⟩}
\paragraph{⟨title⟩} \subparagraph{⟨title⟩}
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{ulem}
\begin{document}
\section{head1}A\subsection{head2}B\subsubsection{head3}C\paragraph{head4}D\subparagraph{head5}E
\end{document}
• 效果
•
• \part{}命令用以将整个文档分割为大的分块,但不影响\chapter或section编号
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{ulem}
\begin{document}
\section{head1}A\subsection{head2}B\subsubsection{head3}C\paragraph{head4}D\subparagraph{head5}E\part{head6}F
\end{document}
• 效果
•
• 上述命令除了生成代编号的标题之外,还向目录中添加条目,并影响页眉脚的内容(详见5.4节)
• 带可选参数的变体
• \section[⟨short title⟩]{⟨title⟩}
• 标题使用title参数,在目录和页眉页脚中使用short title参数
• 带星号的变体
• \section*{⟨title⟩}
• 标题不带编号,也不生成目录项和页眉页脚
• 较低层次如\paragraph和\subparagraph即使不用带星号的变体,生成的标题也不带编号,事实上除了\part外:
• article文档类带编号的层级
• \section
• \subsection
• \subsubsection
• report/book文档类带编号的层级
• \chapter
• \section
• \subsection
• 对此详细解释和调整方法见8.3.3小节
• latex及标准文档类并未提供\section等章节命令定制格式的功能,这一功能由titlesec宏包提供。详情请参考宏包的帮助手册
• 3.1.2 目录
• 在latex中生成目录非常容易,只需在合适的地方使用命令:\tableofcontents该命令会生成单独的一个章节,标题默认为“Contents”,可通过8.4节给出的方法定制标题
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{ulem}
\begin{document}
\tableofcontents
\section{head1}A\subsection{head2}B\subsubsection{head3}C
\end{document}
• 效果
•
• 生成正确的目录项,一般需要编译两次源码使用\chapter* 或 \section*这样不生成目录项的章节标题命令,而又想手动声称该章节的目录项,可以在标题命令后使用:\addcontentsline{toc}{⟨level⟩}{⟨title⟩}其中level为章节层次chapter或section等,title为出现于目录项的章节标题
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{ulem}
\begin{document}
\tableofcontents
\section{head1}A\subsection{head2}B\subsubsection{head3}C
\begin{abstract}这是摘要\ldots\end{abstract}\addcontentsline{toc}{section}{摘要}\section{我们的祖国是美丽的花园}\section{我们敬爱的土地是圣地}
\end{document}
• 效果
•
• 3.1.3 文档结构的划分
• 所有标准文档类都提供了一个\appendix命令将正文和附录分开,使用\appendix后,最高一级章节改为拉丁字母编号,从A开始
• book文档类还提供了前言、正文、后记结构的划分命令
• 前言部分
• \frontmatter
• 页码为小写罗马字母格式;其后的\chapter不编号
• 正文部分
• \mainmatter
• 页码为阿拉伯数字格式,从1开始计数;其后章节编号正常
• 后记部分
• \backmatter
• 页码格式不变,继续正常计数;其后的\chapter不编号
• 以上三个命令还可和\appendix命令结合,生成有前言、正文、附录、后记四部分的文档源代码3.1结合1.6的\include命令和其他一些命令示意了一份完整的文档结构
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{ulem}
\begin{document}
\tableofcontents
\section{head1}A\subsection{head2}B\subsubsection{head3}C
\begin{abstract}这是摘要\ldots\end{abstract}\addcontentsline{toc}{section}{摘要}\section{我们的祖国是美丽的花园}\section{我们敬爱的土地是圣地}
\addcontentsline{toc}{section}{附录}\appendix\section{}补充内容……\section{}补充内容……
\end{document}
• 效果
• 第1页
•
• 第2页
•
• 3.2 标题页
• latex支持生成简单的标题页其中前两个命令是必须的,\date命令可选latex还提供了一个\today命令自动生成当前日期,\date默认使用\today在\title、\author等命令内可以使用\thanks命令生成标题页的脚注,用\and隔开多个人名在信息给定后就可以使用 \maketitle 生成一个简单的标题页
• \title{⟨title⟩}
• \author{⟨author⟩}
• \date{⟨date⟩}
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}\title{标题⟩}\author{Mary\thanks{E-mail:**@.com} \and Ted\thanks{Corresponding author} \and Louis}\today\maketitle
\end{document}
• 效果
• 第1页
•
• 第1页注脚
•
• article文档类的标题默认不单独成页,而report和book默认单独成页可在 \documentclass命令调用文档类时指定titlepage/notitlepage选项以修改默认的行为
• latex标准类还提供了一个简单的titlepage环境,生成不带页眉页脚的一页用户可以在这个环境中使用各种排版元素自由发挥,生成自定义的标题页替代\maketitle命令甚至可以利用titlepage环境重新定义\maketitle:
\renewcommand{\maketitle}{\begin{titlepage}… % 用户自定义命令\end{titlepage}}
• 事实上,为标准文档类指定了titlepage选项之后使用\maketitle命令生成的标题页就是一个titlepage环境以上是latex标准文档类的标题页相关命令用法在各种文档类模板中经常有自定义的标题页,有可能需要除了\title和\author以外的命令给定信息,用法也可能与标准文档类不一致使用文档模板前一定要仔细阅读文档摹本的帮助手册
• 标准模板
• \documentclass[…]{book}
% 导言区,加载宏包和各项设置\usepackage{…}
% 此处示意对参考文献和索引的设置\usepackage{makeidx}\makeindex\bibliographystyle{…}
\begin{document} \frontmatter \maketitle % 标题页 \include{preface} % 前言章节 preface.tex \tableofcontents
\mainmatter \include{chapter1} % 第一章 chapter1.tex \include{chapter2} % 第二章 chapter2.tex …
\appendix \include{appendixA} % 附录 A appendixA.tex …
\backmatter \include{prologue} % 后记 prologue.tex \bibliography{…} % 利用 BibTeX 工具生成参考文献 \printindex % 利用 makeindex 工具生成索引\end{document}
• 3.3 交叉引用
• 交叉引用是latex强大的自动排版功能之一在能够被交叉引用的地方,如章节、公式、图表、定理等位置使用 \label{⟨label-name⟩}命令,之后可以在别处使用\ref{⟨label-name⟩} 或者 \pageref{⟨label-name⟩}分别生成交叉引用的编号和页码为了生成正确的交叉引用,一般也需要多次编译源代码
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}\section{C1}A reference to this subsection\label{sec:1}
\section{C2}see section~\ref{sec:1} on\label{sec:2}
\section{C3}page~\pageref{sec:1}.
\ref{sec:2}.\end{document}
• 效果
•
• \label命令可用于记录各种类型的交叉引用,使用位置分别为
• 章节标题
• 在章节标题命令\section等之后紧接着使用
• 行间公式
• 单行公式在公式内任意位置使用多行公式在每一行公式的任意位置使用
• 有序列表
• 在enumerate环境的每个\item命令之后、下一个\item命令之前任意位置使用
• 图表标题
• 在图表标题命令\caption之后紧接着使用
• 定理环境
• 在定理环境内部任意位置使用
• 在使用不记编号的命令形式(\section*、\caption*、带可选参数的 \item 命令等)时不要使用\label命令,否则生成的引用编号不正确
• 3.4 脚注
• 使用\footnote命令可以在页面底部生成一个脚注:\footnote{⟨footnote⟩}
• 在有些情况下(比如在表格环境、各种盒子内)使用\footnote并不能正确的生成脚注可以分两步进行,先使用\footnotemark为脚注计数,再在合适的位置用\footnotetext生成脚注
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
“天地玄黄,宇宙洪荒。日月盈昃,辰宿列张。”\footnote{出自《千字文》。}
\begin{tabular}{l} \hline “天地玄黄,宇宙洪荒。日月盈昃,辰宿列张。”\footnotemark \ \hline\end{tabular}\footnotetext{表格里的名句出自《千字文》。}\end{document}
• 效果
•
• 3.5 特殊环境
• 3.5.1 列表
• latex提供了基本的有序和无序列表环境enumerate和itemize,两者的用法很类似,都用\item表明每个列表项enumerate环境会自动对列表项编号
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\begin{enumerate}
\item\第1项…\第2项…\\item\第1项…\end{enumerate}
\end{document}
• 效果
•
• \item可带一个可选参数,将有序列表的计数或者无序列表的符号换成自定义的符号列表可以嵌套使用,最多嵌套4层
• 例:enumerate 自定义符号 & 嵌套
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\begin{enumerate} \item An item. \begin{enumerate} \item A nested item. \item[*] A starred item. \item Another item. \label{itref} \item A nested item. \item[+] A ‘plus’ item. \item Another item. \end{enumerate} \item Go back to upper level. \item Reference(\ref{itref}).\end{enumerate}
\end{document}
• 效果
•
• 例:itemize
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\begin{itemize} \item An item. \begin{itemize} \item A nested item. \item[+] A ‘plus’ item. \item Another item. \end{itemize} \item Go back to upper level.\end{itemize}
\end{document}
• 效果
•
• 关键字环境description的用法与以上两者类似,不同的是\item后的可选参数用来写关键字,以粗体显示,一般是必填的
• \begin{description}\item[⟨item title⟩] . . .\end{description}
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\begin{description} \item[Enumerate] Numbered list. \item[Itemize] Non-numbered list.\end{description}
\end{document}
• 效果
•
• 3.5.2 对齐环境
• 创建对齐的文本环境
• 左对齐
• \begin{flushleft} . . . \end{flushleft}
• 居中
• \begin{left} . . . \end{left}
• 右对齐
• \begin{flushright} . . . \end{flushright}
• 仅改变小范围文字对齐方式
• 左对齐
• \raggedleft…
• 居中
• \lefting…
• 右对齐
• \raggedright…
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\section{环境效果}\begin{left} Centered text using a \verb|left| environment.\end{left}\begin{flushleft} Left-aligned text using a \verb|flushleft| environment.\end{flushleft}\begin{flushright} Right-aligned text using a \verb|flushright| environment.\end{flushright}
\section{命令效果}\leftingCentered text paragraph.
\raggedrightLeft-aligned text paragraph.
\raggedleftRight-aligned text paragraph.
\end{document}
• 效果
•
• 三个命令和对应的环境经常被误用,有直接用所谓的\flushleft命令或者raggedright环境,都是不慎严格的用法(即使它们可能有效)有一点可以将两者区分开来:left等环境会在上下文产生一个额外的间距,而\lefting等命令不产生,只是改变对齐方式比如在浮动体环境table或figure内实现居中对齐,用\lefting命令即可,没必要再用left环境
• 3.5.3 引用环境
• latex环境了两种引用的环境:quote用于引用较短的文字,行首不缩进quotation用于引用若干段文字,首行缩进
• verse用于排版诗歌,与quotation恰好相反,verse是首行悬挂缩进的
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\section{普通文字}Francis Bacon says:\begin{quote} Loneliness has become a norm in my life\end{quote}
《木兰诗》:\begin{quotation} 万里赴戎机,关山度若飞。 朔气传金柝,寒光照铁衣。 将军百战死,壮士十年归。 归来见天子,天子坐明堂。 策勋十二转,赏赐百千强。……\end{quotation}
\section{诗歌}Rabindranath Tagore’s short poem:\begin{verse} Beauty is truth’s smile when she beholds her own face in a perfect mirror.\end{verse}
\end{document}
• 效果
•
• 3.5.4 摘要环境
• 摘要环境abstract默认只在标准文档类中的article和report文档类可用,一般用于紧跟\maketitle命令之后介绍文档的摘要若文档类指定了titlepage选项,则单独成页;反之,单栏排版时相当于一个居中的小标题加一个quotation环境,双栏排版时相当于\section*定义的一节
• 3.5.5 代码环境
• 有时需要将一段代码原样转移输出,这就要用到代码环境verbatim,它以等宽字体排版代码,回车和空格也分别起到换行和空格的作用;带星号的版本更进一步将空格显示成
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\section{不带星号}\begin{verbatim} #include int main() { std::cout << “Hello, world!” << std::endl; return 0; }\end{verbatim}
\section{带星号}\begin{verbatim*} for (int i=0; i<4; ++i) printf(“Number %d\n”,i);\end{verbatim*}
\end{document}
• 效果
•
• 要排版简短的代码或关键字,可使用\verb命令:\verb⟨delim⟩⟨code⟩⟨delim⟩⟨delim⟩表明代码的分界位置,前后必须一致,除字母、空格或星号外,可任意选择使得不与代码本身冲突的符号,习惯上使用 | 号同verbatim环境,\verb后也可以带一个星号,以显示空格
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\section{不带星号}\verb|\LaTeX| \par\verb+(a || b)+
\section{带星号}\verb*-(a || b)-
\end{document}
• 效果
•
• \verb命令对付好的处理比较复杂,一般不能用在其他命令的参数里,否则多半会出错verbatim 宏包优化了 verbatim 环境的内部命令,并提供了 \verbatiminput 命令用来直接读入文件生成代码环境。fancyvrb 宏包提供了可定制格式的 Verbatim 环境;listings 宏包更进一步,可生成关键字高亮的代码环境,支持各种程序设计语言的语法和关键字。详情请参考各自的帮助手册。
• 3.6 表格
• 3.6.0 引入
• latex里排班表格不如word等所见即所得的工具渐变和自由,不过对于不太复杂的表格来将,完全能够胜任
• 右边是排版表格最基本的tabular环境用法其中{⟨column-spec⟩}是列格式标记,在接下来的内容将仔细介绍: & 用来分隔单元格;\ 用来换行;\hline 用来在行与行之间绘制横线
• \begin{tabular}{⟨column-spec⟩}⟨item1 ⟩ & ⟨item2 ⟩ & . . . \\hline⟨item1 ⟩ & ⟨item2 ⟩ & . . . \\end{tabular}
• 直接使用tabular环境的话,会和周围的文字混排tabular环境可带一个可选参数控制垂直对齐(默认垂直居中)但是通常情况下我们不这么用。tabular环境一般会放置在table浮动体环境中并用\caption 命令加标题
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\begin{tabular}{|c|} left-\ aligned \\end{tabular},\begin{tabular}[t]{|c|} top-\ aligned \\end{tabular},\begin{tabular}[b]{|c|} bottom-\ aligned\\end{tabular} tabulars.
\end{document}
• 效果
•
• 3.6.1 列格式
• latex表格中基本的列格式如右表表格中每行的单元格数目不能多于列格式里 l/c/r/p 的总数,否则将出错
•
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\begin{tabular}{lcr|p{6em}} \hline left & left & right & par box with fixed width\ L & C & R & P \ \hline\end{tabular}
\end{document}
• 效果
•
• 说明
• lcr|p{6em}
• l
• 第1列为左对齐
• c
• 第2列为居中
• r
• 第3列为右对齐
• |
• 在第3列后面插入1条竖线
• p{6em}
• 第4列的宽度为6em若超过就会自动换行(列不变)
• @格式可在单元格后插入任意文本,但同时它也消除了单元格前后额外添加的间距@格式可以适当使用 | 充当竖线特别的,@{}可直接用来消除单元格前后的间距
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\begin{tabular}{@{} r@{:}lr @{|}} \hline 1 & 1 & one \ 11 & 3 & eleven \ \hline\end{tabular}
\end{document}
• 效果
•
• 另外latex还提供了简便的将格式参数重复的写法 {⟨n⟩}{⟨column-spec⟩}以下两种写法是等效的1、\begin{tabular}{|c|c|c|c|c|p{4em}|p{4em}|}2、\begin{tabular}{|{5}{c|}*{2}{p{4em}|}}
• 有时需要为整列修饰格式,比如整列改变为粗体如果每个单元格都加上\bfseries命令会比较麻烦array宏包提供了辅助格式>和<,用于给格式前后加上修饰命令>语法:“>{单元格内容格式}”+“列指示”<语法:“列指示”+“<{单元格修饰}”
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{array}
\begin{document}
\begin{tabular}{>{\bfseries}r<{*}l} \hline italic & normal \ column & column \ \hline\end{tabular}
\end{document}
• 效果
•
• 说明
• >{\bfseries}r
• r所在列单元格变为粗体
• r<{}
• r所在列单元格右上角添加
• 辅助格式甚至支持插入\lefting等命令改变p列格式的对齐方式,一般还要加额外的命令\arraybackslash以免出错
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{array}
\begin{document}
\begin{tabular} {>{\lefting\arraybackslash}p{10em}} \hline Some left-aligned long text. \ \hline\end{tabular}
\end{document}
• 效果
•
• 3.6.2 列宽
• 在控制列宽方面,latex表格有着明显的不足:l/c/r格式的列宽是由文字内容的自然宽度决定的,而p格式给定了列宽却不好控制对齐(可用array宏包的辅助格式),更何况列与列之间通常还有间距
• latex本身提供了tabular*环境用来排版定宽表格,但是不太方便使用比如要用到@格式插入额外命令,令单元格之间的间距为\fill
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{array}
\begin{document}
\begin{tabular*}{14em}{@{\extracolsep{\fill}}|l|l|l|l|} \hline A & B & C & D \ \hline a & b & c & d \ \hline\end{tabular*}
\end{document}
• 效果
•
• 3.6.3 横线
• 我们已经在之前的例子见过许多绘制表格线的 \hline命令另外\cline{⟨i⟩-⟨j⟩} 用来绘制跨越部分单元格的横线:⟨i⟩-⟨j⟩:表示在当前行的 i 到 j 列画一条横线
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{array}
\begin{document}
\begin{tabular}{|c|c|c|} \hline 4 & 9 & 2 \ \cline{2-3} 3 & 5 & 7 \ \cline{1-1} 8 & 1 & 6 \ \hline\end{tabular}
\end{document}
• 效果
•
• 在科技论文排版中广泛应用的格式是三线表,形式干净简明三线表由booktabs宏包支持,它提供了\toprule、\midrule和\bottomrule命令用以排版三线表的三条线,以及和\cline对应的\cmidrule除此之外,最好不要用其他横线以及竖线
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{array}\usepackage{booktabs}
\begin{document}
\begin{tabular}{cccc} \toprule & \multicolumn{3}{c}{Numbers} \ \cmidrule{2-4} & 1 & 2 & 3 \ \midrule Alphabet & A & B & C \ Roman & I & II& III \ \bottomrule\end{tabular}
\end{document}
• 效果
•
• 3.6.4 合并单元格
• latex是一行一行排版表格的,横向合并单元格较为容易,由\multicolumn命令实现\multicolumn{⟨n⟩}{⟨column-spec⟩}{⟨item⟩}n为需要合并的列数column-spec是合并后单元格的列属性item为合并后单元格的内容
上面例子体现了形如\multicolumn{1}{⟨column-spec⟩}{⟨item⟩} 的命令可以用来修改某一个单元格的列格式
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{array}\usepackage{booktabs}
\begin{document}
\begin{tabular}{|c|c|c|} \hline 1 & 2 & Center \ \hline\multicolumn{2}{|c|}{3} & \multicolumn{1}{r|}{Right} \ \hline 4 & \multicolumn{2}{c|}{C} \ \hline\end{tabular}
\end{document}
• 效果
•
• 纵向单元格需要用到multirow宏包提供的\multirow命令:\multirow{⟨n⟩}{⟨width⟩}{⟨item⟩}n为需要合并的行数width是合并后单元格的宽度,填表示自然宽度item为合并后单元格的内容
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|c|} \hline \multirow{2}{}{Item} & \multicolumn{2}{|c|}{Value} \ \cline{2-3} & First & Second \ \hline A & 1 & 2 \ \hline\end{tabular}
\end{document}
• 效果
•
• 说明
• \hline
• 画一条横线
• \cline{2-3}
• 在当前行的第2~3列画一条横线
• 3.6.5 嵌套表格
• 相对于合并单元格,拆分单元格对于latex来说并非易事在单元格中嵌套一个小表格可以起到“拆分单元格”的效果在以下的例子中,注意要用\multicolumn命令配合@{}格式把单元格的额外边距去掉,使得嵌套的表格线能够和外层的表格正确连接
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|c|} \hline a & b & c \ \hline a & \multicolumn{1}{@{}c@{}|} {\begin{tabular}{c|c} e & f \ \hline e & f \ \end{tabular}} & c \ \hline a & b & c \ \hline\end{tabular}
\end{document}
• 效果
•
• 说明
• \multicolumn{1}{@{}c@{}|} {\begin{tabular}{c|c} e & f \ \hline e & f \ \end{tabular}}
• 在外层表格看来就是1个单元格
• \multicolumn{1}{@{}c@{}|}
• 合并的单元格为1,表示未合并单元格,仅仅是用作调整单元格样式
• @{}:消除单元格之间的间距
• 不加@{}的效果
•
• 如果不需要为“拆分的单元格”画线,并且只在垂直方向“拆分”的话,makecell宏包提供的\makecell命令是一个简单的解决方案
• 例:未用makecell宏包
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|} \hline a & \multicolumn{1}{@{}c|} {\begin{tabular}{c} e\ e\ \end{tabular}} \ \hline a & b \ \hline\end{tabular}
\end{document}
• 效果
•
• 例:使用makecell宏包
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{multirow}\usepackage{makecell}
\begin{document}
\begin{tabular}{|c|c|} \hline a & \makecell{e \ e} \ \hline a & b \ \hline\end{tabular}
\end{document}
• 效果
•
• 3.6.6 行距控制
• latex生成的表格看起来通常比较紧凑,修改参数\arraystretch可以得到行距更加宽松的表格
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\renewcommand\arraystretch{1.8}\begin{tabular}{|c|} \hline Really loose \ \hline tabular rows.\ \hline\end{tabular}
\end{document}
• 效果
•
• 另一种增加行间距的办法是给换行命令\添加可选参数,在这一行下面加额外的间距适用于在行间不加横线的表格但是这种换行方式的存在导致了一个问题:若当前行行首有"[]“,上一行行末有\命令,那么”[]“就会被编译器当作是上一行行末\命令的参数解决方法:1、在行首不使用[ ]2、在行首使用 [ ]时,将其放入花括号{ }中3、每一个\命令都手动加上参数,”\命令"=“\[0pt]”
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\section{正常效果}\begin{tabular}{c} \hline Head lines \[6pt] tabular lines \ tabular lines \ \hline\end{tabular}
\section{误编译效果}\begin{tabular}{c} \hline Head lines \[6pt] tabular lines \ [12pt]tabular lines \ \hline\end{tabular}
\end{document}
• 效果
•
• 3.7 图片
• latex本身不支持插图功能,需要由graphicx宏包辅助支持使用latex+dvipdfmx编译命令时,调用graphicx宏包时要指定dvipdfmx选项而使用pdflatex或者xelatex命令编译时不需要
• 从前latex只能插入.eps格式的图片,需要把.jpg转成.eps格式latex发展到今天,不同的编译命令支持的图片格式各异见表3.1,这个表格也能解答为什么.eps格式图片在pdflatex编译命令下出错的问题本表格也再一次说明,使用xlatex命令是最推荐的方式
•
• 在调用了graphicx宏包后,就可以使用\includegraphics命令加载图片了\includegraphics[⟨options⟩]{⟨filename⟩}
• {⟨filename⟩}
• 相对/绝对路径,(补充:文件名不需要引号修饰,但是最后需要加上 /)
•
• [⟨options⟩]
•
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{graphicx}
\begin{document}
\begin{table}[t] \includegraphics[width=6cm,height=3cm]{1.png} \caption{折线图}\end{table}
\end{document}
• 效果
•
• 3.8 盒子
• 3.8.0 引入
• 盒子是latex排版的基础单元,相信学过前端的朋友对盒子这个名词不会陌生每一行是一个盒子,里面的文字从左到右依次排列每一页也是一个盒子,各行文字从上到下依次排布
• 3.8.1 水平盒子
• 生成水平盒子的命令如下:1、\mbox{…}2、\makebox[⟨width⟩][⟨align⟩]{…},width:盒子宽度,align:对齐方式
• \mbox生成一个基本的水平盒子,内容只有一行(除非嵌套下文介绍的垂直盒子,或者其他内容),不允许分段。从外表看上去,\mbox的内容与正常的文本无二,不过断行时文字不会从盒子里断开
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
|\mbox{Test some words.Test some words.Test some words.Test some words\par.Test some words.Test some words.Test some words.Test some words.Test some words.Test some words.}|\|\makebox[10em]{Test some words.}|\|\makebox[10em][l]{Test some words.}|\|\makebox[10em][r]{Test some words.}|\|\makebox[10em][s]{Test some words.}|
\end{document}
• 效果
•
• 说明
• 看得出来换行命令在\mbox生成的水平盒子里无效
• 3.8.2 带框的水平盒子
• \fbox和\framebox可以为水平盒子添加边框,命令如下:1、\fbox{…}2、\framebox[⟨width⟩][⟨align⟩]{…}
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\fbox{Test some words.}\\framebox[10em][r]{Test some words.}
\end{document}
• 效果
•
• 可以通过\setlength命令(见5.2.1小节)调节边框宽度\fboxrule和内边距\fboxsep,命令如下:\setlength{\fboxrule}{size}\setlength{\fboxsep}{height}\framebox[width][align]{…}
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\framebox[10em][r]{Test box}\[1ex] %添加行间距\setlength{\fboxrule}{1.6pt}\setlength{\fboxsep}{1em}\framebox[10em][r]{Test box}
\end{document}
• 效果
•
• 3.8.3 垂直盒子
• 如果需要排版一个文字可以换行的盒子,latex提供了两种方式:1、\parbox[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}{…}2、\begin{minipage}[⟨align⟩][⟨height⟩][⟨inner-align⟩]{⟨width⟩}. . .\end{minipage}
• align
• 盒子与周围文字的对齐情况
• t:顶部(与周围顶部对齐)b:底部(与周围底部对齐)c:居中s:分散
• height
• 盒子高度
• inner-align
• 内容对齐方式
• width
• 盒子行宽
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
三字经:\parbox[t]{3em}%{人之初 性本善 性相近 习相远}\quad千字文:\begin{minipage}[t][8ex][t]{4em} 天地玄黄 宇宙洪荒\end{minipage}
\end{document}
• 效果
•
• 如果在minipage中使用\footnote命令,生成的脚注出现在盒子底部编号是独立的,并且使用小写字母编号这也是minipage环境被称为“迷你页”(Mini-page)的原因在\parbox 里无法正常使用 \footnote 命令只能在盒子里使用 \footnotemark(先标记)在盒子外使用\footnotetext(后显示)并且编号并不独立
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
\fbox{\begin{minipage}{15em}% 这是一个垂直盒子的测试。 \footnote{脚注来自 minipage。}\end{minipage}}
\end{document}
• 效果
•
• 说明
• 在parbox中嵌套了一个mini页,多损啊
• 3.8.4 标尺盒子
• \rule命令用来画一个实心的矩形盒子,也可适当调整以用来画线(标尺):\rule[⟨raise⟩]{⟨width⟩}{⟨height⟩}
• 例
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}
Black \rule{12pt}{0.4pt} box.\parUpper \rule[4pt]{6pt}{8pt} andlower \rule[-4pt]{6pt}{8pt} box.\parA \rule[-22pt]{3em}{4pt} line.
\end{document}
• 效果
•
• 说明
• [⟨raise⟩]
• 将整个盒子在垂直方向上移动为0时,盒子起始处在当前行底部
• {⟨width⟩}
• 盒子宽度
• {⟨height⟩}
• 盒子高度
• 3.9 浮动体
• 3.9.0 引入
• 内容丰富的文章或书记往往包含许多图片和表格等内容这些内容的尺寸往往太大,导致分页困难latex为此引入了浮动体的机制,令大块的内容可以脱离上下文,放置在合适的位置latex预定义了两类浮动体环境figure和table习惯上figure里放置图片,table里放置表格,但并没有严格限制,可以在任何一个浮动体里放置文字、公式、表格、图片等等任意内容⟨placement⟩ 参数提供了一些符号用来表示浮动体允许排版的位置,如 hbp 允许浮动体排版在当前位置、底部或者单独成页。table 和 figure 浮动体的默认设置为 tbp
• 以table环境举例,figure同理
• 代码
• \documentclass[UTF8]{ctexart}
\begin{document}hello, \begin{table}[t] 表格在这儿\end{table}world!!!\end{document}
• 效果
•
• 说明
• [⟨placement⟩]
• h:浮动体在当前页的当前位置
• t:浮动体在当前页的顶部
• b:浮动体在当前页的底部
• p:浮动体在当前页之后重开一页
• !:在决定位置时忽视上下文
•
• 双栏排版环境下,latex提供了table和figure环境用来排版跨栏的浮动体它们的用法与table和figure一样,不同之处为双栏的⟨placement⟩ 参数只能用 tp 两个位置
• 浮动体的位置选取受到先后顺序的限制如果某个浮动体由于参数限制、空间限制等原因在当前页无法放置就要推迟到之后处理,并使得之后的同类浮动体一并推迟\clearpage命令会在另起一页之前,先将所有推迟处理的浮动体排版成页此时位置等限制被完全忽略,由编译器自主安排
• float宏包为浮动体提供了H位置参数,不与htbp及!混用使用H位置参数时,会取消浮动机制,将浮动体视为一般的盒子插入当前位置
• 3.9.1 浮动体的标题
• 图表等浮动体提供了\caption命令加标题,并且自动给浮动体编号:\caption{…}\caption的用法非常类似于\section等命令,可以用带星号的命令\caption生成不带编号的标题,也可以使用带可选参数的形式\caption[…]{…},使得在目录里使用短标题\caption命令后面还可以紧跟\label命令标记交叉引用
• \caption 生成的标题形如 “Figure 1: . . . ”(figure 环境)或 “Table 1: . . . ”(table 环境)可通过修改 \figurename 和 \tablename 的内容来修改标题的前缀、(详见第 8.4 节)标题样式的定制功能由 caption 宏包提供,详见该宏包的帮助手册table 和 figure 两种浮动体分别有各自的生成目录的命令:table:\listoftablesfigure:\listoffigures
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{graphicx}\usepackage{caption}
\begin{document}
\section{使用caption}\begin{figure}[h] \includegraphics[width=6cm,height=3cm]{1.png} \caption{自定义名称1}\end{figure}
\section{使用caption}\begin{figure}[h] \includegraphics[width=6cm,height=3cm]{1.png} \caption*{自定义名称2}\end{figure}
\section{使用figurename}\begin{figure}[h] \includegraphics[width=6cm,height=3cm]{1.png} \figurename{自定义名称0}\end{figure}
\end{document}
• 效果
•
• 3.9.2 并排和子图表
• 我们时常有在一个浮动体里面放置多张图的用法最简单的用法就是直接并排放置,也可以通过分段或换行命令\排版多行多列的图片
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{graphicx}\usepackage{caption}
\begin{document}
\begin{figure}[htbp] \lefting \includegraphics[width=6cm,height=3cm]{1.png} \qquad \includegraphics[width=6cm,height=3cm]{1.png} \includegraphics[width=6cm,height=3cm]{1.png} \caption{…}\end{figure}
\end{document}
• 效果
•
• 由于标题是横跨一行的,用\caption命令为每个图片单独生成标题就需要借助借助前文提到的\parbox或者minipage环境(详情见3.8.3小节),将标题限制在盒子内
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{graphicx}\usepackage{caption}
\begin{document} \begin{figure}[htbp] \lefting \begin{minipage}[c][2cm][c]{4cm} \lefting \includegraphics[width=3cm,height=1.5cm]{1.png} \caption{…} \end{minipage} \qquad \begin{minipage}[c][2cm][c]{4cm} \lefting \includegraphics[width=3cm,height=1.5cm]{1.png} \caption{…} \end{minipage}\end{figure}
\end{document}
• 效果
•
• 当需要进一步给每个图片定义小标题时,就要用到subfig宏包的功能了这里仅举一例,更详细的用法请参考subfig宏包的帮助文档
• 例
• 代码
• \documentclass[UTF8]{ctexart}\usepackage{graphicx}\usepackage{subfig}
\begin{document}
\begin{figure}[htbp]\lefting\subfloat[子图0]{ \begin{minipage}[c][2cm][c]{4cm} \lefting \includegraphics[width=3cm,height=1.5cm]{1.png} \end{minipage}}\qquad\subfloat[子图1]{% \begin{minipage}[c][2cm][c]{4cm} \lefting \includegraphics[width=3cm,height=1.5cm]{1.png} \end{minipage}}\caption{…}\end{figure}
\end{document}
• 效果
•
• 3.10 latex所支持的单位
•