Latex 学习笔记(二)

前言

距离上次记录LaTex已经有好长一段时间了,大概有大半年的时间都没有更新,而上一次的记录的内容,大多数是出自于自己的需要,确实,想把技能变成肌肉记忆,还是得需要长时间的去练习的,后面会给出一些实用的东西,经常用,自然而然的就知道怎么回事了。这次做笔记,就事无巨细了,基础的还是很重要的,毕竟是给自己看的,不必那么多奇技淫巧。

图片及子图排版

在学生时代写论文的时候,很多图都是通过matlab绘制的,而matlab导出的图最清晰地就属eps格式了,这里感兴趣的可以去了解下矢量图与位图,这里就不做阐述了,但是对于日常的记录而言,其实png或者其他位图都是可以满足阅读要求的,而在写论文的时候,会经常使用到多个子图的排版问题,这里就简要的记录下,因为实现的方式太多了,

graphicx 提供了一组控制命令,其中最常用的是插图命令如下(以eps为例,假设在文件夹imgs下的图片名字为your.eps):

includegraphics[opts]{imgs/your.eps}

下表为常用选项(opts):

选项 说明
angle 图形旋转角度,正值表示逆时针旋转
height 图形高度
width 图形宽度
scale 图形缩放因数

插入图片一般可以分为两种情况,一种是只有一个图,一个标题;另一种是有多个图,每个图有个子标题,然后有个总的大标题。第一种情况就不做介绍了,第二种情况的命令如下(需要subfigure宏包):

\begin{figure} [!htbp]
\begin{minipage}[t]{0.5\textwidth}
\centering
\includegraphics[width=2.7in]{imgs/your1.eps}
\caption{fig1}
\end{minipage}%
\begin{minipage}[t]{0.5\textwidth}
\centering
\includegraphics[width=2.7in]{imgs/your1.eps}
\caption{fig2}
\end{minipage}
\end{figure}

如果不想让其显示caption,删除或者置空即可。

与段落有关的距离

首行缩进

段落首行缩进的距离由长度\parindent决定,用户可如下改变这个值∶

\setlength{\parindent}{长度}

当上述长度不是零时,段落的首行会自动缩进由长度指定的距离。对于中文文章,命令

\setlength{\parindent}{2em} 或在 CJK环境中写上 \CJKindent

就会使其后段落首行缩进两个汉字的距离.需要注意的是上述两种首行缩进的距离等于当前字体两个汉字的宽度,若改变了字体尺寸,需重新再写一次上述命令,才会使后继段落首行缩进两个新字体汉字的宽度。若想使某段首行不缩进,可在该段开始放上命令\noindent。需要注意的是每一节的第一段的首行并不会缩进,为了使第一段能像其他段一样会首行缩进,可在第一段的开始放上命令

\hspace*{\parindent}

段落间距

两段之间的距离 等于行 间 隔(也称为行 隙)(\lineskip)加上 长 度\parskip的值,如果重设这个值,通常应设置成弹性长度并使用ex作单位,以便它随着字体尺寸的改变而变化。中文书籍段落之间的距离通常与行间隔相同,为达到这种效果,可在导言区放上命令

\setlength{\parskip}{0pt}

字母上加小箭头

遇到一些矢量需要加箭头,短的箭头可用比如 \vec 去表示,想用长箭头去表示,可用指令\overrightarrow 来实现。

listings 宏包使用说明

listings 可以自定义一些特定风格的代码,在自己写文档的时候经常能够用的上,比如给matlab代码块配色等等,总之是挺好用的一个宏包,在网上可以查阅到很多的用法,下面的内容来自于知乎用户 Lluvio Liu

预设

\lstset{ 
basicstyle=\small, %环境中的代码字体变小 [在结尾要加逗号!]
basicstyle=\tt, %使用teletype字体(一种等宽字体)
basicstyle=\it, %使用罗马斜体
%其他可选的还有:\bf, \sc, \st, \sl, \em, \nocorr等
}
\lstset{ 
keywordstyle=\color{black}, %设置关键字颜色为黑色
keywordstyle=\color{blue}, %设置关键字颜色为蓝色
keywordstyle=\bfseries, %不改变当前字体的族与形状,但转变成bold加粗序列
keywordstyle=\mdseries, %不改变当前字体的族与形状,但转变成中等粗细medium序列
keywordstyle=\underbar, %添加下划线
keywordstyle=\color{black}\bfseries\underbar, %添加下划线的加粗黑色关键字
}
\lstset{
identifierstyle=\color{red},
identifierstyle= , %不设置 }

showstringspaces=false %去掉空格时产生的下划的空格标志, 设置为true则出现
showtabs=true

\lstset{ [公式]
commentstyle=\it\color[RGB]{100,100,100}, }
\lstset{
numbers=left, %在左侧显示行数
numbers=right %在右侧显示行数
numbers=none, %去掉行数显示
numberstyle=\tiny\color{red}, %数字大小,颜色调整
numberstyle=\it, %数字字体调整
stepnumber=2 , %每两行标号一次
numbersep=5pt, %数字右端(若为左侧显示数字)水平距离代码5pt
}
\lstset{
tabsize=2; %此时一个tab键=2个空格
}

\lstset{
xleftmargin=2em, %整体距左侧边线的距离为2em
xrightmargin=2em,
}

也可以使用
linewidth=1.2\linewidth 改变长度

\lstset{
columns=fixed, %改变字母间的空隙大小
columns=flexible,
columns=fullflexible,
}

环境参数

\begin{lstlisting}
[firstline=2, lastline =5] 只排版2-5行的代码
[language=C] %代码为C语言(会自动识别C语言关键字)
[language=Java] %代码为Java语言
[float] %设置为浮动题
[float=t] %在页面上方
[float=!h] %在此处
[firstnumber=100] %第一个数字为100 [firstnumber=last] %起始行数为上一段lstlisting环境结尾的行数 [caption={MyCode1}] %说明 [caption={[Code2] An very important code}] %可分别添加一个短的和长的caption [label=Code1] % 标签 [title=Code1] %可以去掉label产生的Listings 1
[name=MyCode1] %使用name=***为代码环境取名,同名的环境代码行数会延续
[aboveskip=5pt] %与代码环境上一行的垂直间距为5pt
[belowskip=4pt] %与代码环境下一行的垂直间距为4pt

当然,它们也可以在 lstset 中设置

[emph={printf}, emphstyle={\underbar}] %强调printf,在它下面加下划线
[emph={for,while}, emphstyle=\color{red}]
[emph={strlen}, emphstyle=\color{red},
emph={[2]strcpy}, emphstyle={[2]\color{blue}},
emph={[3]strcmp},emphstyle={[3]\underbar}] %强调多个,并且强调方式不同

框架

[frame=none] %无框
[frame=leftline,topline,rightline, bottomline] %分别对应只在左侧,上方,右侧,下方有竖线
[frame=trb] %t-top,r-right,b-bottom,l-left. 这是为框架只在上,右,下方
[frame=trBL] %大写表示双重线
在预设中可设置框的拐角处为圆弧:
\lstset{
\frameround = fttt,
}
\frameround后必须有四个字母。第一个字母表示右上角的拐角,然后顺时针地依次代表各个拐角。f表示方形,t表示弧形。
frame=shadowbox, %设置阴影
framexleftmargin=4mm, %框架左边界延长(frame是不会考虑到左边的行数栏的)
rulecolor=\color{gray}, %框架颜色设置
rulesepcolor=\color{gray}, %框架阴影颜色设置

背景颜色

\lstset{
backgroundcolor=\color{yellow} %背景颜色为黄色
}

更多的指令

\lstdefinestyle 可以预设多个不同的style。 \lstdefinestyle{numbers1}{numbers=left, stepnumber=1, numberstyle=\tiny, numbersep=10pt} \lstdefinestyle{numbers2}{numbers=none}

\begin{lstlisting}[style=numbers1] 即可选择numbers1作为style

\lstdefinelanguage 定义一个新的语言.
\lstdefinelanguage{SDU}
{morekeywords={ShiYidDa, CheapCafeteria}, %定义关键字
sensitive=false, %是否大小写敏感
morecommet=[l]{//},
morecomment=[s]{/*}{*/},
morecomment=[n]{(*}{*)},
morestring=[b]",
morestring=[d]',}

**morecomment**指令用于定义书写注释的标识符。

[l] 表示标识符后至该行末尾
[s] 表示定义的第一个和第二个标识符之间
[n] 表示从第一个定义的标识符开始,直至出现第二个标识符。
[il] [is] [in] 编译时不显示注释

也可以定义不同颜色的注释(要先定义好普通注释/**/)

\lstset{
morecomment=[s][\color{blue}]{/*+}{*/},
morecomment=[s][\color{red}]{/*-}{*/}, }

\lstlistoflistings 添加过 caption 的代码段可以通过此命令全部被列出来,并且按顺序标号和标注页码。 添加过 name 的代码段也会通过此命令被列出来,且不会参与标号。此时对该代码段再添加caption就会覆盖name。 对于caption{[]}只会打出其短名。

参考

[1] 《LaTex 入门与提高》——陈志杰等。

[2] LaTeX listings 宏包使用说明

知识共享许可协议