最近打算用LaTeX整理一下之前的Stata代码,发现搜了一晚上教程怎么都不能高亮显示,找了一圈之后终于做出来了,现简单整理如下。
- 设置
listings-stata.tex
文件
首先要新建一个.tex文件。主宏包依然是\usepackage{listings}
,但是由于这个宏包没有Stata语言的高亮设置,所以需要人为定义一个.tex文件,相当于一个自编函数,之后调用即可。listings-stata
仅作文件名,可以根据自身喜好进行修改。listings-stata.tex
文件内容如下,将下述代码复制粘贴至空.tex文件中即可。
\usepackage{listings} % 导入代码宏包listings
\usepackage[dvipsnames]{xcolor} % 导入颜色宏包xcolor
\usepackage{fontspec} % 导入字体宏包fontspec
% 设置字体为Consolars
\setmonofont{Consolas}
% 定义新高亮语言Stata
\lstdefinelanguage{Stata}{
morekeywords={var, mat}, % 定义var,mat等字段为关键词
morecomment=[l]{//}, % 定义//之后的部分为注释
morecomment=[s]{/*}{*/}, % 定义/*与*/之间的部分为注释
morecomment=[f]{*}, % 定义*之后的部分为注释
morestring=[s]{`}{'}, % 定义`与'之间的部分为字符串
morestring=[s]{"}{"}, % 定义"与"之间的部分为字符串
morestring=[s]{"`}{'"}, % 定义"`与'"之间的部分为字符串
morestring=[s]{`"`}{'"'} % 定义`"`与'"'之间的部分为字符串
}
\lstset{
language=Stata, % 设置代码语言为Stata
basicstyle=\ttfamily, % 设置字体字母族
commentstyle=\color{gray}, % 设置注释颜色
keywordstyle=\color{blue}, % 设置关键词颜色
stringstyle=\color{BrickRed}, % 设置字符串颜色
tabsize=6,
frame=trBL, % 设置边框格式
framesep=2em, % 设置边框与代码边距
flexiblecolumns=true % 紧凑
}
- 进行排版
接下来直接进行排版即可,注意排版环境为XeLaTeX。
% ! XeLaTeX
\documentclass{ctexart} % 文档环境为ctexart
\usepackage{geometry} % 导入页面设置宏包geometry
\geometry{left=2cm, top=1.5cm} % 设置页边距参数
\input{listings-stata.tex} % 导入前面设定好的listings-stata.tex文件
\begin{document}
\begin{lstlisting}
/* 时变空间权重矩阵 */
clear
// 设定日志文件
log using Data_plus.log, replace
// 加入因变量
foreach var in first_ind second_ind third_ind trade_all forinv_trade_all{
// 加入时变矩阵
foreach mat in peo gdp{
clear all
frame create `mat'
frame `mat': use `mat'.dta
// 导入数据
use Data_all.dta,clear
// 面板设定
xtset city year
// 1. 时变空间权重矩阵SAR模型
nwxtregress `var' creative coordination environmental open share, ///
dvarlag(`mat', frame(`mat') id(year ID1 ID2) timesparse) seed(1234)
// 计算空间溢出效应
estat impact
// 2. 时变空间权重矩阵SDM模型
frame `mat': putmata `mat' = (year ID1 ID2 `mat'), replace
nwxtregress `var' creative coordination environmental open share, ///
dvarlag(`mat', mata timesparse) ivarlag(`mat': creative coordination ///
environmental open share, mata timesparse) seed(1234)
// 计算空间溢出效应
estat impact
}
}
log close
\end{lstlisting}
\end{document}
- 结果如下。