Latex_note_5
Latex_note_5
Latex中的参考文献
Latex中的参考文献BibTex
课程代码:
1 | % 导言区 |
课程内容细节:
- 一次管理,一次使用的参考文献格式:
1
2
3
4
5 \begin{thebibliography}
\bibitem[label]{citekey}文献条目1
\bibitem[label]{citekey}文献条目2
……
\end{thebibliography}其中文献条目包括:作者,题目,出版社,年代,版本,页码等。
引用时可以采用:\cite{citekey1,citekey2……}
- 可以在查文献时选择bibtex格式的参考文献以进行参考文献的应用等操作。具体操作见视频:LaTeX中的参考文献BibTex
课程代码效果图:
Latex中的参考文献BibLaTeX
课程代码:
1 | % 导言区 |
课程内容细节:
- 样式文件(参考文献样式文件–bbx文件,引用样式文件–cbx文件)使用LATEX编写
- 更多细节见:LaTeX中的参考文献BibLaTeX
- BibLatex编写思想为一次管理多次使用
课程代码效果图:
无~
参考解读
论文编号
LaTeX的自动编号
我们在一个有序列表中,都是用\item
来表示一个个条目,却从来没有指定这是第几条条目。在我们按下排版按钮后,LaTeX自动给我们的条目标好了编号。这样的话,比如说我们想在第二条条目和第三条条目之间增加一条条目,只需要加一个\item
即可,而不需要把接下来的所有条目的编号都加一。这就叫LaTeX的自动编号。
图片和表格的自动编号都是由\caption{}
命令控制的。在默认情况下,图片和表格的编号都是全局顺序编号。也就是说,如果一张图片是整个文档中出现的第3张图片,那么它的编号就是3. 这种编号方式多见于论文。在书中常见的编号方式是章节内编号。
我们需要的是counterwithin
. 首先,我们需要给出的是环境名。比如说,我们想改变的是表格环境的编号方式,环境名就是table, 图片的环境名就是figure. 接下来,我们需要考虑的是这个编号是跟着哪个编号走的。比如说,如果我需要表格的编号跟着section
走,即section
的编号是1,那么该章节内第三个出现的表格的编号就是1.3, 如果表格的编号跟着subsection
走,即subsection
的编号是1.3, 那么该子章节内第三个出现的表格的编号就是1.3.3. 下面假设我们要改变的是表格环境的编号方式,让它跟着subsection
走,那么我们需要在导言区写的是:
1 | \counterwithin{table}{subsection} |
交叉引用
在我们写论文的过程中,我们可能会用到之前写过的东西。比如说,我的这步结论是根据之前的某个表格得出的。那么,按照LaTeX的哲学,我们可以不用在源码中写出具体的编号,因为编号是LaTeX自动帮我们编的。那么,我们该如何做呢?LaTeX提供了两个指令:\ref{}
和\label{}
.
\label{}
做的,是给我们想要引用的表格或是其他有编号的东西起个别名,而\ref{}
做的是根据别名找到对应的编号。比如说,我给某个表格起了个叫adjTab的别名,那么\ref{adjTab}
在编译后会自动变成该表格的编号。
那我们的\label{}
该放在哪里呢?放在产生编号的命令后面。 这是什么意思呢?比如说,我要引用一个章节section{}
的编号,那么我们应该写的是\section{Title}\lable{aLabel}
. 而我们之前讲过,图片和表格的编号都是由\caption{}
控制的,所以我们应该写的是\caption{Title}\label{aLabel}
。除此之外,我们可以在前面去引用后面的编号。比如说,在某段之后会出现一个表格,但我在这表格之前的那段里就可以用\ref
来引用这个表格的编号。
我们在编译LaTeX的时候,会发现除了.pdf文件以外,还生成了其他文件。LaTeX在编译的时候,会搜集所有的\label
命令,在编译生成的.aux文件中创建一个对应表,一个label名对应一个编号。此时,\ref
命令是不管用的,因为在处理\ref
命令的时候,那个表还没有建成,所以第一次编译出来的结果,\ref
命令对应的位置都是"??". 在我们再一次编译之后,\ref
才会出现正确的编号。
参考文献
面介绍手动控制参考文献的方法:在正文中使用thebibliography
环境。例如:
1 | \begin{thebibliography}{99} |
在\begin{thebibliography}
后还有一个{99}
, 这是参考文献的最大条数,在这之间的每一个\bibitem
代表一条参考文献。同样地,这是LaTeX自动帮你编号的。它实际上只有一个参数,我之所以写了两个大括号,是方便我们理解和使用。\bibitem{aRef}{aContent}
, 排版出来的效果只有aContent
. aRef
有什么用呢?它用于文章前面的交叉引用(关于这个我后面的文章里会详细说明)。这里只需要知道一点,在文章后面写了以后,在文章正文内就能使用\cite{aRef}
来引用这条参考文献。排版出来的效果为出现这个参考文献对应的编号。如果需要将编号置于右上角,则可以在导言区里写
1 | \newcommand{\upcite}[1]{\textsuperscript{\cite{#1}}} |
然后在正文中使用\upcite{aRef}
即可。
而这些参考文献的格式从哪来,我们一般是在百度学术或者Google学术上,找到对应的论文,然后点引用,会出现三种格式。我们直接复制GB/T 7714即可。
附录
使用附录的方式有许多种,我常用的是使用宏包appendix
,其他方法大家也可以自行搜索。
在导言区里写上:
1 | \usepackage[toc, page]{appendix} |
然后,在正文中想要出现附录的地方使用appendices
环境,并且添加一句话,即:
1 | \begin{appendices} |
然后,在这个环境中用\section{}
等命令就能产生附录中的章节了。那句额外的代码,是为了不在目录中出现每个附录章节的名字,而只在目录中出现一个附录代表全体。
对于中文文档类,如ctexart等,需要在导言区\usepackage[toc, page]{appendix}
之后加上两句话:
1 | \renewcommand{\appendixtocname}{附录} |
这两个的作用,一个是在目录中用“附录”替换"appendices", 一个是在正文中用“附录”替换"appendices".
Latex中的自定义命令和环境
课程代码:
1 | % 导言区 |
课程内容细节:
\newcommand-定义命令,命令只能由字母组成,不能以\end开头。
\newcommand命令可以是简单的字符串替换,如
1 \newcommand{\PRC}{People's Republic of \emph{China}}
- \newcommand也可以使用参数,参数可以从1到9,使用时用#1,#2……#9表示
- \newcommand的参数也可以有默认值,指定参数个数的同时指定了首个参数的默认值,那么这个命令的第一个参数就成为可选的参数(要使用中括号指定)
- \renewcommand-重定义命令,与\newcommand命令作用和用法相同,但只能用于已有命令。
- 可以使用\newenvironment和\renewenvironment来定义新环境。且\newcommand和\newenvironment可以嵌套使用。
- 环境参数只能在环境前定义{begdef}中可以使用参数,环境后定义{enddef}中不能再使用环境参数。如果需要,可以先把前面得到的参数保存在一个命令中,在后面使用。
课程代码效果图:
详细解读
自定义指令
\newcommand
用于定义新命令。LaTeX的定义指令的方式有两类:def类和new类。比如说,我已经有一个指令叫\cmd
和\cmd1
, 我要定义一个新的指令\cmd2
, 它是先使用\cmd
, 再使用\cmd1
. 那么我们有如下两种定义方法:
1 | \def\cmd2{\cmd\cmd1} |
或者
1 | \newcommand\cmd2{\cmd\cmd1} |
可以直观地认为,就是在接下来文中出现\cmd2
的地方,都直接用\cmd\cmd1
来代替。
但是,\def
命令和\newcommand
命令也有区别,如果我定义了一个指令,它的名字已经被别的指令用了,那么\def
命令则是直接替代,\newcommand
命令会报错,我们用\renewcommand
则不会报错。
对于定义带参数的命令,比如说,我们已经有了两个指令\cmd{}
和\cmd1{}
,我想定义指令\cmd2{}{}
,它接受两个参数,第一个参数传给\cmd{}
, 第二个参数参数传给\cmd1{}
,这时候我们可以写
1 | \def\cmd2#1#2{\cmd{#1}\cmd1{#2}} |
或者
1 | \newcommand\cmd2[2]{\cmd{#1}\cmd1{#2}} |
对于\def
指令,有几个参数就写几个#
, 对于\newcommand
指令,[]
中直接写参数的数量。
自定义环境
如果我要新定义一个环境,则使用命令\newenvironment
命令。比如说,我现在已经有一个叫env
的环境,我想新定义一个叫env1
的环境,它先进入env
环境,再在环境内执行\cmd
指令。那么,我们的写法为
1 | \newenvironment{env1}{\begin{env}\cmd}{\end{env}} |
在{\env1}
之后的第一个大括号内,写的是内容,可以理解为在遇到\begin{env1}
时直接替换;第二个大括号内,遇到\end{env1}
时直接替换。
最后,介绍一些作用域。和部分编程语言一样,LaTeX也有块级作用域。在LaTeX中,作用域由{...}
及环境\begin{env}...\end{env}
构成。比如说我们之前提到的\beseries
命令,它使它所在的作用域内的所有文字变成粗体,于是我们可以写{\bfseries This is bold} and this is normal.
这样, This is bold会是粗体,而and this is normal则会变回正常。在任何环境之间,也是如此。
- Title: Latex_note_5
- Author: Charles
- Created at : 2023-02-02 12:13:58
- Updated at : 2023-08-17 09:44:53
- Link: https://charles2530.github.io/2023/02/02/latex-note-5/
- License: This work is licensed under CC BY-NC-SA 4.0.