Latex之复杂距离、⾃定义章节样式、⾃定义⽬录样式**
1. 复杂距离
**
a.⽔平和竖直距离
b.填充距离与弹性距离
c.⾏距
d.制表符
e.悬挂缩进
f.整段缩进
2. ⾃定义章节样式
3.⾃定义⽬录样式
% 导⾔区
\documentclass[a4paper]{ctexart}
\usepackage{ctex}
\usepackage{xeCJK} %导⼊这个宏包,就可以⽀持中⽂
\usepackage{amsmath}
\usepackage{changepage} %提供了⼀个adjustwidth环境
\usepackage{titlesec} %⾃定义章节样式
\usepackage{titletoc} %⾃定义⽬录样式
%5.3复杂距离
%5.3.1⽔平和竖直距离
%⽔平距离的命令有两种:⼀种禁⽌在此处断⾏,如图5.1所⽰;另⼀种允许换⾏,如表5.2所⽰。
\begin{document}
%表5.1禁⽌换⾏的⽔平距离
你好$\thinspace$你好,你好\,你好  \\ %\thinspace或\,长度为0.1667em
你好$\negthinspace$你好,你好$\!$你好\\ %\negthinspace或\!,长度为-0.1667em
你好$\enspace$你好          \\ %\enspace,长度为0.5em
你好$\nobreakspace$你好,你好~你好  \\ %\nobreakspace,长度为空格
%表5.2允许换⾏的⽔平距离
你好$\quad$你好          \\ %\quad,长度为1em
你好$\qquad$你好            \\ %\qquad,长度为2em
你好$\enskip$你好            \\ %\enskip,长度为0.5em
你好\ 你好                \\ % \ (空格),长度为空格
%使⽤\hspace{length}命令⾃定义空格长度,其中length的取值如-1em、2ex、5pt plus 3pt minus 1pt,以及0.5\linewidth等。
%如果想要这个命令在断⾏处也正常输出空格,使⽤带星号命令\hspace*。
%类似地,使⽤\vspace{length}和\vspace*{length},作为竖直⽅向上空⽩距离的输出。
%要定义新的长度宏,使⽤\newlength命令;
%要重设现有长度宏的值,可以使⽤\setlength命令;
%要调整长度宏的值,则使⽤\addtolength命令。
\newlength{\mylatexlength}
\setlength{\mylatexlength}{10pt}
\addtolength{\mylatexlength}{-5pt}
%此外,LATEX还定义了三个竖直长度\smallskip 、\medskip和\bigskip
\parbox[t]{3em}{Tex\par Tex}
\parbox[t]{3em}{Tex\par\smallskip Tex}
\parbox[t]{3em}{Tex\par\medskip Tex}
\parbox[t]{3em}{Tex\par\bigskip Tex}
%5.3.2填充距离与弹性距离
%命令\fill⽤于填充距离,要作为\hspace或\vspace的参数。
%另外还有单独使⽤的命令\hfill与\vfill,它们的作⽤相同。
%弹性距离指按⼀定⽐例计算得到的多个空⽩,命令是\stretch.
左\hspace{\fill}右\\
左\hspace{\stretch{1}}中
\hspace{\stretch{2}}右\\
%你还可以使⽤类似\hfill的\hrulefill和\dotfill命令.
L\hfill R\\
L\hrulefill Mid\dotfill R
%5.3.3⾏距
%LATEX的⾏距由基线计算,可以使⽤命令\linespread{num}默认的基线距离\baselineskip是1.2倍的⽂字⾼,所以默认⾏距是1.2倍。
%如果更改linespread为1.3,那么⾏距变为1.2*1.3=1.56倍————这也是ctex⽂档类的做法。
%此外还有\lineskiplimit和\lineskip命令。
%有时候在两⾏之间,可能包含较⾼的内容(⽐如分式1/2),这使得前⼀⾏底部与后⼀⾏顶部的距离⼩于limit值,
%则此时⾏距会由\linespread控制改为由\lineskip控制。
%本书采⽤如下设置:
\setlength{\lineskiplimit}{3pt}
\setlength{\lineskip}{3pt}
%5.3.4制表位
%制表位使⽤tabbing环境,需要注意,这是⼀个极其容易造成坏箱的环境。这⾥有⼏个要点:
% \=:在此处插⼊制表位。
% \>:跳⼊下⼀个制表位。
% \\:制表环境内必须⼿动换⾏和缩进。
% \kill:若⾏末⽤\kill代替\\,那么该⾏并不会输出到⽂档中。
% ⼀个丑陋的例⼦如下:
\begin{tabbing}
\hspace{4em}\=\hspace{8em}\=\kill
制表位\>就是这样\>使⽤的\\
随时\>可以添加\>新的:\=就这样\\
也可以\=随时重设\=制表位\\
这是\>新的\>⼀⾏
\end{tabbing}
%5.3.5悬挂缩进
%这种缩进在实际排版中并不常⽤,⽽在需要列表的场合中才使⽤,但可以借助列表宏包enumitem进⾏定义。
%这⾥介绍的是正⽂中悬挂缩进的使⽤。
%如果需要对单独⼀段进⾏悬挂缩进,如下所⽰:
%\hangafter 2
格式化命令format参数%\hangindent 6em
%这两⾏代码放在某⼀段的上⽅,其作⽤是控制紧随其后的段落从第⼆⾏开始悬挂缩进,并且设置悬挂缩进的长度是6em.
%如果连续的多段需要悬挂缩进,可以通过改造编号列表环境或者verse环境来实现。(verse环境:事实上这是⼀个排版诗歌的环境)
%或者如下这样尝试:
正⽂...
{\leftskip=3em\parindent=-1em
\indent
这是第⼀段。注意整体需要放在第⼀组花括号内,且花括号前应当有空⽩⾏。第⼀段前需要加indent命令,最后⼀段的末尾需额外空⼀⾏,否则可能出现异常。
这是第⼆段。
\ldots
这是最后⼀段。别忘了空⾏。
}
%5.3.6整段缩进
%宏包changepage提供了⼀个adjustwidth环境,它能够控制段落两侧到⽂本区(⽽不是页边)的距离。
\begin{adjustwidth}{1cm}{3cm}
%本段⾸⾏缩进需要额外⼿⼯输⼊。本环境距⽂本左侧1cm,距右侧3cm.
\end{adjustwidth}
%也可以尝试赋值\leftskip等命令,这对奇偶页的处理更有效。
%5.4⾃定义章节样式
%本节主要涉及titlesec宏包的使⽤。章节样式调整使⽤\titlelabel、\titleformat*命令。
%前者需要配合计数器使⽤,后者可简单地设置章节标题的字体样式。
\titlelabel{\thetitle.\quad}
\titleformat*{\section}{\itshape}
%章节样式由标签和标题⽂字两部分构成。
%标签⼀般表明了⼤纲级别以及编号,⽐如“第⼀章”“Section3.1”等。
%标题⽂字⽐如“⾃定义章节样式”这⼏个字。
%在report与book类的subsection及以下级别,article类的paragraph及以下级别是默认没有编号的,
%因此其对应的级别也没有标签,除⾮⼈⼯进⾏设置。
%对于需要详细处理标签、标题⽂字两部分的情况,titlesec宏包还提供了⼀个\titleformat命令。
%调⽤⽅式如下:
%\titleformat{command}[shape]{format}{label}{sep}{before-code}[after-code]
%上⾯参数对应的含义如下所⽰。
%command:⼤纲级别命令,如\chapter等。
%shape:章节的预定义样式,分为9种。
%hang.默认值,标题在右侧,紧跟在标签后。
%block.标题和标签封装排版,不允许额外的格式控制。
%display.标题另起⼀段,位于标签的下⽅。
%runin.标题与标签同⾏,且正⽂从标题右侧开始。
%leftmargin.标题与标签分段,位于左页边。
%rightmargin.类似leftmargin,位于右页边。
%drop.⽂字包围标题。
%wrap.类似drop,⽂本会⾃动调整以适应最长的⼀⾏。
%frame.类似display,但有框线。
%format:⽤于设置标签和标题⽂字的字体样式,这⾥可以包含竖直空距,即标题⽂字到正⽂的距离。
%label:⽤于设置标签的样式,⽐如“第\chinese\thechapter章”⼤概是ctexbook类的默认样式。
%sep:标签和标题⽂字的⽔平间距,必须是LATEX的长度表达。当shape取display时,表⽰竖直空距;取frame时,表⽰标题到⽂本框的距离。 %before:标题前的内容。
%after:标题后的内容。对于hang,block,display,此内容取竖向;对于runin、leftmargin,此内容取横向;否则此内容被忽略。
%宏包还给出了\titlespacing与\titlespacing*两个命令,其使⽤⽅式如下:
%\titlespacing*{command}{left}{before-sep}{after-sep}[right-sep]
%\titlespacing{command}{left}{*m}{*n}[right-sep]
%各参数的含义如下所⽰:
%command:⼤纲级别命令,如\chapter.
%label:缩进值。在left/right margin下表⽰标题宽;在wrap中表⽰最⼤宽;在runin中表⽰标题前缩进
的空距。
%before-sep:标题前的垂直空距。
%after-sep:标题与正⽂间的空距。在hang、block、display中是垂直空距;在runin、wrap、drop、left\right margin中是⽔平空距。
%right-sep:可选,仅对hang、block、display适⽤。
%*m/*n:在titlespacing命令中的m、n分别表⽰before与after-sep的变动范围倍数,基数是默认值。
%宏包中还有⼀个\titleclass命令,⽤来定义新的章节命令(\subchapter)或者重申明已有的章节命令。
%使\part命令不单独占据⼀页
\titleclass{\part}{top}
%新定义⼀个\subchapter命令
\titleclass{\subchapter}{straight}[\chapter]
\newcounter{subchapter}
\renewcommand{\thesubchapter}{\Alph{subchapter}}
%其中,第⼆参数表⽰章节类型,可以是page(独占⼀页)、top(另开新页),或者straight(普通)。
%宏包还给出了\titlelinne命令,⽤来绘制填充同时嵌⼊其他对象的⾏。
%对象可以嵌⼊到左、中、右三个位置。如果你只是想填充⼀⾏⽽不嵌⼊对象,使⽤\titlerule及其带星号的命令形式。
%嵌⼊对象的线
%\titleline[c]{CHAPTER 1}
%单纯填充⼀⾏
%\titlerule[height]
%\titlerule*[width]{text}
%最后,我们给出⼀个复杂的样式定义⽰例。这个例⼦稍微有些复杂,只⽤到了\titleformat相关章节的命令。它⽤\startcontents与\printcontents命令,在每章开始都插⼊该章的⼦⽬录。
%限于本书篇幅,请读者⾃⾏编译。
\newcommand{\chaformat}[1]{%
\parbox[b]{.5\textwidth}{\hfill\bfseries #1}%
\quad\rule[-12pt]{2pt}{70pt}\quad
{\fontsize{60}{60}\selectfont\thechapter}}
%chapter样式定义中的\chaformat以章名作为隐式参数
\titleformat{\chapter}[block]{\hfill\LARGE\sffamily}
{}{0pt}{\chaformat}[vspace{2.5pc}\normalsize
\startcontents\printcontents{}{1}
{\setcounter{tocdepth}{2}}]
\titleformat*{\section}{\centering\Large\bfseries}
\titleformat{\subsubsection}[hang]{\bfseries\large}{\rule{1.5ex}{1.5ex}}{0.5em}{}
%本例没有定义subsection样式。如果你想给subsection级别标号(即赋予它标签),使⽤\setcounter{secnumdepth}{3}.(report/book类part级别深度为0,递增;article类part级别深度为-1,⽆chapter级别。故它们的section及以下级别深度⼀致。)
%临时更改\secnumdepth可以⽣成不编号的章节,但章节名仍会被⽤在⽬录和\markboth中,有时这⽐带星号的章节命令更巧妙⼀些。
%5.5⾃定义⽬录样式
%本节主要涉及titletoc宏包,它与titlesec宏包的⽂档写在同⼀个pdf⽂件中。
%⾸先是⽬录的标题,其可以通过recommand更改,分别是\contentsname、\listfigurename和\listtablename。
%再来看命令\dottecontents和\titlecontents:
%\dottecontents{section}[left]{above-code}{label-width}{leader-width}
%\titlecontents{section}[left]{above-code}{numbered-entry-format}{numberless-entry-format}{filler-page-format}[below-code]
%各参数的含义如下所⽰:
%section:⽬录对象,可以填chapter、section,或者figure、table。
%left:⽬录对象左侧到左页边区的距离,⼀般必选。
%above-code:格式调整命令,可以包含垂直对象,也可以⽤\contentslabel,即指定本级别⽬录标签箱⼦的宽度。
%label-width:标签宽。
%leader-width:填充符号宽,默认的填充符号是圆点。
%numbered-entry-format:如果有标签,表⽰在⽬录⽂本前输⼊的格式。
%numberless-entry-format:没有标签时输⼊的格式。
%filler-page-format:填充格式,⼀般借助titlesec中的\titlerule*[width]{text}命令。
%below-code:在entry之后输⼊的格式,⽐如垂直空距。
%下例中,section级别使⽤了填充命令\titlerule*。请读者⾃⾏编译效果。
\titlecontents{chapter}[1.5em]{}{\contentslabel{1.5em}}{\hspace*{-2em}}{\hfill\contentspage}
\titlecontents{section}[3.3em]{}{\contentslabel{1.8em}}{\hspace*{-2.3em}}{\titlerule*[8pt]{$\cdot$}\contentspage}
\titlecontents*{subsection}[2.5em]{\small}{\thecontentslabel{}}{}{,\thecontentspage}[;\qquad][.]
\end{document}