-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathguide.tex
201 lines (190 loc) · 12.9 KB
/
guide.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
\documentclass[withoutpreface,bwprint]{../cumcmthesis} %去掉封面与编号页
\usepackage{verbatim}
\usepackage{url}
\usepackage{pdfpages}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{subcaption}%插入子图
% \usepackage{subfig}
\usepackage{float}
\usepackage{longtable,tabularx}
\usepackage{ltablex}
\keepXColumns
\usepackage{threeparttable}
\usepackage{cite,bookmark}
\title{latex使用指南}
\newcommand{\cnabstractname}{摘要}
\newenvironment{cnabstract}{%
\par\small
% \noindent\mbox{}\hfill{\bfseries \cnabstractname}\hfill\mbox{}\par
\vskip 2.5ex}{\par\vskip 2.5ex}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{document}
\maketitle
\begin{cnabstract}
\textbf{摘要: }
对latex中高频使用的语法进行记录
\par\textbf{关键字: } %网络爬虫\quad 多元线性回归模型\quad 回归模型的检验
%“\par在段首,表示另起一行,“\textbf{}”,花括号内的内容加粗显示
\end{cnabstract}
\tableofcontents
\newpage
\section{文档结构组织}
\subsection{input vs. include}
文档结构组织主要是在应对需要编译的latex文档过长时需要面临的问题,这里结合文档较长时存在的问题来分析\verb|\input|和\verb|\include|命令:
\begin{itemize}
\item 文档较长时,tex代码较长,文本编辑器的功能会大打折扣。这时很自然地想要将文档拆分成多个tex文件,在编译时同时引入,这时就可以使用\verb|\input{文件名}|命令,扩展名(.tex)可省略,\textbf{支持嵌套}
\item 文档较长,当进行细微调整时编译时间较长,这时可以考虑结合使用\verb|\includeonly{文件列表}|\\和 \verb|\include{文件名}|命令\footnote{includeonly是导言区命令,如单独使用include,相当于input命令,不过会在插入tex代码前后都有换页符},这么做的好处是能提高速度——对于只存在于文件列表内的文件,latex只会加载其对应的章节标题等信息,并不会将文档内容引入,这能保证对单个文档进行修改时仍能保持和整体文档一致的效果,大大提高了编译速度,不过需要注意的是\verb|\include{}|命令\textbf{不可以嵌套使用}
\end{itemize}
\subsection{插入pdf}
latex插入pdf时的两种常用方法及其优缺点表述如下:
\begin{itemize}
\item $graphicx$是对$graphics$宏包的扩展或者增强,两个宏包的参数格式有细微差别,后者更多是对前者的补充。因为可以将pdf使用\verb|\includegraphics|引入,所以可以将其放置在浮动体或者直接插入到文档中,其相当于将pdf当做源文件的一部分插入在文档中,对其进行修改或者加以说明都会更方便一些,就个人体验而言更实用一些。
\item $pdfpages$提供了很多选项来插入PDF文件,其在文档中写到避免产生类似$graphicx$插入pdf‘Overfull \verb|\hbox|’ and ‘Overfull \verb|\vbox|’ warnings的提示。自己在使用过程中的体验是该宏包适合用来pdf作为一个\textbf{独立的页面}插入到源文档中的情况,提供了丰富的命令对插入pdf的大小和原页面的大小进行调整,但是如果想对插入的pdf进行局部的调整或者加一个标题之类的操作,相对来说明比较麻烦且排版效果也比较差。
\end{itemize}
如想将导入的pdf双栏排列,建议使用$graphicx$宏包,双栏排列方法见小节:\nameref{双栏}
% \includepdf{../asset/cover.pdf}
\section{浮动体环境}
一般来说,为了排版的美观,都会将表格图片等内容放入浮动体环境,这块主要是针对插入的图片或者表格过大的情况作说明。
\subsection{插入图片}
图片过大的问题相对容易解决,只需要直接在修改\verb|width|的可选参数即可,引用图片\ref{sum_production}
\begin{figure}[H]%H定义浮动体位置,Here
\small
\centering
\includegraphics[width=\textwidth]{./asset/figure.pdf}
\caption{全国煤炭企业前50强产煤总量}\label{sum_production}
\end{figure}
\subsubsection{图片/pdf并列排版}\label{双栏}
在引入pdf或者图片时(insert graphics),为节省页面空间,很多时候将两张图片进行双栏并排显示是一种不错的选择,这也就使用到了浮动体的双栏,这里给出一种比较简单的浮动体双栏排列的方法:
\lstinputlisting[language=tex]{./tex代码/picture_typest/two_pics_parral_subcaption.tex}
排版效果见图 \ref{sub_cap},
{
\input{./tex代码/picture_typest/two_pics_parral_subcaption.tex}
}
除此以外还有一种解决方案是使用\verb|subfigure|,二者的区别可能主要在于三四个子图排列的便捷性上,我不使用这个功能所以也没细致研究,这里给出一个\verb|subfigure|的例子,貌似二者会有冲突,随便用哪种方法好了。
\lstinputlisting[language=tex]{./tex代码/picture_typest/two_pics_subfig.tex}
% 排版效果见图 %\ref{sub_fig},
% {\input{./tex代码/picture_typest/two_pics_subfig.tex}
% }
\subsection{插入表格}
一般来插入的表格都可以通过python的\verb|DataFrame.to_latex()|函数来导出到指定位置,然后通过\verb|input|命令导入使用,经常会用到的导出模板为:
\begin{lstlisting}[language=python]
df.to_latex('./排版/tex代码/cr8.tex',caption='($CR_8$)计算结果',label='table',header=False)
\end{lstlisting}
只需微调函数的参数即可,注意如下:
\begin{itemize}
\item 列名如果有数学公式的话导出会加转义符,这样在latex编译后不能正常显示。可以设置\verb|escape=False|解决这个问题,不过这样设置数值中的转义符号也会被取消掉,这点在对于数值列中含有"\%"的数据中需要注意
\item 不想显示index列或者列名列可以通过调节\verb|index|和\verb|header|参数进行修改
\item 修改表格中数字位数可以通过\verb|float_format|参数进行修改,一个例子是"\%.2f"。
\end{itemize}
插入表格的情况,相对复杂,可能出现的问题包括引入的表格过宽和过长的问题。
一个简单的例子如表\ref{tab:table1}:
{\input{tex代码/table.tex}}
\subsubsection{宽表的缩窄(tabular)}
针对插入表格\textbf{过宽}的情况
\begin{enumerate}
\item 一般选择使用\verb|graphicx|宏包提供的\verb|\resizebox{h-length%l}{v-length%l}{text}|命令来解决。这里给一个示例,语法如表\ref{cr8table}所示(代码在\verb|tex代码|文件夹的\verb|widetable|里边。
{
\input{./tex代码/wide_table}
}
\item 除了缩小表格内容以外,对于宽度溢出不太严重的表格,也可以选择修改水平排版开始位置,这也能使得本来溢出的表格可以被放下,而且也不会导致字体看起来太小(示例如表\ref{cr8.1}所示)
{
\input{./tex代码/little_wide_table}
}
\end{enumerate}
\subsubsection{窄表的定宽处理(tabularx)}
刘海洋老师的书里有写到,可以去翻翻。用的是\verb|tabularx|环境,自己定义了一种新的列格式\footnote{自适应调整列,默认向左对齐,可以自己定义一个居中的列形式,具体见表源码}(X),因为是起于\verb|tabular|所以相对来说比较好用。效果大概是下边这样:
\input{tex代码/fix-width_table.tex}
这种环境不能使用Python的\verb|to_latex|直接导出,
\subsubsection{长表格}
\textbf{python函数原生支持的方法,主要问题是如果是一个窄表调成定宽比较麻烦}:
长表格主要使用的是\verb|longtable|宏包的longtable环境(使用说明可以看刘海洋的教程),与tabular类似,不过多了一些处理跨页操作的命令。因为\verb|to_latex|函数可以直接导出这种样式的表格,所以在实际中使用这种表格的频率也比较高,想要导出这种环境的表格时,只需在开始提到的模板中加入\verb|longtable=True|的参数即可获得,使用比较方便\footnote{longtable的表格宽度是根据表格内容调整的,当表格属于长而窄的类型时美观度比较有限,这时可以考虑利用python的concat函数对长表格进行拆分和列拼接}。\par
\textbf{注意}:长表格不支持\verb|resizebox{h-length}{v-length}{text}|命令来自适应调节表格的宽度,遇到表格宽度过大的情况,推荐适当缩小表格字体( 在表格外添加 \verb|\footnotesize| 命令 ) 或者对表格的结构进行调整,具体效果如表 \ref{num_var_desc}所示。\par
{
\input{./tex代码/long_table.tex}
}
\textbf{长窄表调成定宽}:这时无法沿用resizebox的思路,主要是因为longtable环境和tabular环境不兼容,一个新的解决方案是使用\verb|ltablex|宏包,这个宏包是对\verb|longtable|和\verb|tabularx|的结合,可以实现长表格的定宽,它使用longtable环境定义长表的语法同时支持tabularx环境的列格式定义,具体可以看long\_table.tex文件,记得在导言区添加\verb|\usepackage{ltablex}|命令和\verb|\keepXColumns|命令。
\section{插入题注}
这是一个题注\footnote{使用比较简单,这里不再赘述}。
\section{导入参考文献}
参考文献的导入主要是使用zotero先导出bib文件。引文格式可能需要根据不同的使用场景进行调整。
\subsection{biblatex宏包}
\verb|biblatex|宏包提供了比较全面的中文参考文献导入支持,需要注意的是在编译bib文件时默认使用\verb|biber|后端,同时在生成和导入参考文献时与其它宏包有所区别:
\begin{verbatim}
\documentclass{ctexart}
% 使用符合 GB/T 7714-2015 规范的参考文献样式
\usepackage[style=gb7714-201,backend=bibtex]{biblatex}
% 注意加 .bib 扩展名
\addbibresource{egbibdata.bib}
\begin{document}
见文献\cite{caimin2006}。
\printbibliography%插入参考文献
\end{document}
\end{verbatim}\par
\subsection{中文文献的自定义导入}
对于中文文献,可以使用\verb|gbt7714|宏包来生成满足我国标准的参考文献格式:
\begin{verbatim}
\documentclass{ctexart}
\usepackage{gbt7714}
\bibliographystyle{gbt7714-numerical}
\begin{document}
\cite{...}
...
\bibliography{bibfile}
\end{document}
\end{verbatim}\par
这种宏包导入有一个比较麻烦的是作者在参考文献中出现的位置问题,经测试该库不会自动按照bib文件中作者的顺序排列,在多位作者同时完成一篇文章时排序混乱,官方文档提供了一种解决方案,但是比较麻烦,推荐使用\verb|biblatex|宏包。\verb|gbt7714|宏包的好处是它对中文文献的引用格式和参考文献的样式有比较好的支持。
按照国标的规定,参考文献的标注体系分为“顺序编码制”和“著者-出版年制”。用户应在导言区调用宏包 gbt7714,并且使用 \verb|\bibliographystyle| 命令选择参考文献
表的样式,比如:
\begin{verbatim}
\bibliographystyle{gbt7714-numerical} %顺序编码制
或者
\bibliographystyle{gbt7714-author-year} %著者-出版年制
\end{verbatim}
此外还可以使用 2005 版的格式 gbt7714-2005-numerical 和 gbt7714-2005-author-year。
另外几点注意:
\begin{itemize}
\item 可以通过\verb|\citestyle{⟨citation style⟩}|命令来改变引用位置的显示格式,可选参数为super, numbers, author-year,在顺序编码制下默认引用格式为上角标(sub).
\item 同一位置引用多篇文献时,如果想要在引用位置自动对文献进行排序则需要将\verb|sort&compress|传递给宏包的可选参数
\begin{verbatim}
\usepackage[sort&compress]{gbt7714}
\end{verbatim}
\end{itemize}
\textbf{注意该宏包不要和cite宏包一同引入,会起冲突}。\par
\LaTeX 中更为常用的一种导入参考文献的格式,其中\verb|unsrt|样式表示参考文献条目按照文章中出现顺序排列。
%参考文献
\begin{verbatim}
\bibliographystyle{unsrt}
\bibliography{ref}
\end{verbatim}
该方法下在引用位置处显示是类似"[4]"的形式。
\newpage
%附录
\begin{appendices}
\section{插入代码}
\begin{lstlisting}[language=r]
data<-read.csv('./data.csv')
names(data)
# model<-lm(log(单价)~.-所属区-朝向-小区,data)
shapiro.test(log(data$单价))
shapiro.test(data$单价)
model <- lm(log(单价) ~ ., data)
summary(model)
sel_model <- step(model)
summary(sel_model)
# 多重共线性
library(car)
library(lmtest)
resettest(sel_model, power = 2)
library(lmtest)
bgtest(sel_model)
bptest(model)
library("ivreg")
model <- ivreg(log(单价) ~ 容积率 + 总楼栋数 + 房龄 + 客厅数 + 卫生间数 + 总楼层+绿化率 + 小区参考均价 | 容积率 + 总楼栋数 + 房龄 + 客厅数 + 卫生间数 + 总楼层+绿化率 + 交易价值 + 居住品质, data = data)
summary(model)
\end{lstlisting}
\subsection{input方法}
更为简洁的一种导入方法
\lstinputlisting[language=python]{./asset/test.py}
\end{appendices}
\end{document}