语法高亮:LaTeX中的彩色Stata代码
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会 · 效率分析专题
作者: 陈卓然 (中山大学岭南学院)
邮箱: chenzhr25@mail2.sysu.edu.cn
编者按: 本文部分摘译自下文以及连老师的 Stata2Latex 讲义,特此致谢!
Source:
Haghish, E. F. 2019. "On the importance of syntax coloring for teaching statistics." The Stata Journal 19 (1): 83-86. -PDF- 连玉君. 2007. "Stata 与 的完美结合" -PDF-
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
目录
1. 引言
1.1 Verbatim 环境
1.2 stata 宏包
2. 安装 statax 宏包
3. 基本用法
4. 高级功能
5. 拓展
6. 结论
7. 参考文献
8. 相关推文
1. 引言
(Green 1989; Green and Petre 1996)指出代码高亮可以增强人们对于代码结构的感知,同时也可以提高代码的可读性 (Hendrix et al. 1998; Cross et al. 1999). 传统上在 中插入 Stata 代码块的命令或代码块有如下几种方式。
1.1 Verbatim 环境
采用 LaTeX 中的 Verbatim
环境,需要在导言部分引入 fancyvrb
宏包包,命令为\usepackage{fancyvrb}
。
这可以允许你插入任意软件的代码,譬如说我想将调入 1988 年美国妇女工资的资料并做一些描述性统计分析的 Stata 代码写入 Latex 中,就可以采用如下的代码 (当然前提是要先导入 fancyvrb
的包,加入的两个选项分别表示给代码行编号,然后给代码标红):
\begin{Verbatim}[numbers=left, formatcom=\color{red}]
*----------------------
*-1.3.2 命令的适用范围 [if] [in]
help operator //运算符
sysuse "nlsw88", clear
sum in 10/20 // 第10至第20个观察值之间的观察值
sum wage in -5/-1 // 倒数...
sum wage hours if race == 1 // 等于
sum wage if race ~= 3 // 不等于
sum wage if (race==2)&(married==1) // 且
sum wage if (race==3)|(married==0) // 或
winsor2 wage hours // 外部命令
lianxh DID
\end{Verbatim}
实现效果如下
上述结果虽然可以做到给代码块加上颜色,但是依然无法做到区分出代码,注释,以及代码中的不同命令等功能。
1.2 stata 宏包
安装 stata 宏包的方法可参见连老师的讲义 Stata与LaTeX的完美结合| 连享会主页 (lianxh.cn)。完成之后,为了呈现 Stata 源码,只需将 Stata 代码放在 stlog
环境中即可。不妨仍以上述代码作为例子:
\begin{stlog}
*----------------------
*-1.3.2 命令的适用范围 [if] [in]
help operator //运算符
sysuse "nlsw88", clear
sum in 10/20 // 第10至第20个观察值之间的观察值
sum wage in -5/-1 // 倒数...
sum wage hours if race == 1 // 等于
sum wage if race ~= 3 // 不等于
sum wage if (race==2)&(married==1) // 且
sum wage if (race==3)|(married==0) // 或
winsor2 wage hours // 外部命令
lianxh DID
\end{stlog}
实现效果和 Verbatim
结果类似,
可见 stlog
不能将代码块高亮出来,也无法做到区分注释、命令以及选项的功能。
针对上述问题,statax
包便应运而生了。statax
包可以高亮 HTML 和 中的语法,完美解决了上述命令无法解决的问题。
2. 安装 statax 宏包
statax
包是放置在 github-statax, 在 Stata 中可以使用 github
命令来安装
github install haghish/statax
但是这种安装方法有时可能会受限于网络,因此大家如果无法采用这种方式顺利安装的话,可以手动从上述网站上下载,然后将statax的tex文件和你想要编译的文件放在同一个文件夹下面即可实现statax的功能。
3. 基本用法
我们可以使用 \include
或者 \input
的命令来调入statax. 本质上 Statax.tex
就是写在另外一份tex文件中的 Latex 代码,注意 \input
和\include
是有区别的,具体体现在如下几点,详细内容请参见Latex之input{}与include{}:
\include{}
中的参数不需要加.tex
的扩展名,而\input{}
可以加.tex
扩展名,也可以不加。\include{}
可以在之前和之后使用\clearpage
另起新页,同时将文件内容贴到\include{}
的位置,而\input{}
只是将文件的内容复制到\input{}
所在位置,并不需要其他多余的操作。\include{}
只可以用在文档区,不可用在导言区,同时也不可以递归调用,而\input
可以递归调用。
在成功调入Statax.tex
之后,就可以把想要高亮的 Stata 源码放在 statax
的环境中即可,仍然以上述代码为例:
\begin{statax}
*----------------------
*-1.3.2 命令的适用范围 [if] [in]
help operator //运算符
sysuse "nlsw88", clear
sum in 10/20 // 第10至第20个观察值之间的观察值
sum wage in -5/-1 // 倒数...
sum wage hours if race == 1 // 等于
sum wage if race ~= 3 // 不等于
sum wage if (race==2)&(married==1) // 且
sum wage if (race==3)|(married==0) // 或
winsor2 wage hours // 外部命令
lianxh DID
\end{statax}
实现效果如下:
和前面的 Verbatim
以及 stlog
命令对比,statax
命令下的 Stata 代码显得更加清晰易读,命令和注释都以不同的颜色体现出来。
4. 高级功能
除了上述 Wrangler 类之外,我们还可以人为设定代码块高亮颜色,比如采用Sunset类颜色,就可以实现如下的效果
为实现此效果只需修改 Statax 中的颜色设定的代码,作者在github 仓库中提供了四种类型的颜色,除了上述的 Sunset 和 Wrangler 之外, 还有一种常规的白底模式,实现效果如下:
以及一种 Daring 类(黑底)的,实现效果如下
此外连老师还提供了一种颜色可供大家选择
5. 拓展
除了 statax
之外,listings
也是一个很不错的宏包,首先需要导入 listings
宏包:\usepackage{listings}
。紧接着定义可能用到的颜色,之后要对 listings
代码块进行设置:
\lstset{% listings 代码块设置
language=tex, % 设置语言
%basicstyle=\ttfamily\fontsize{9pt},% %\footnotesize
basicstyle=\ttfamily\footnotesize,%
columns=fixed,
numbers=left,numberstyle=\Tiny % 在左侧显示行号
backgroundcolor=\color[RGB]{245,245,244}, % 设定背景颜色
keywordstyle=\color[RGB]{40,40,255}, % 设定关键字颜色
numberstyle=\footnotesize\color{darkgray}, % 设定行号格式
commentstyle=\it\color[RGB]{0,96,96}, % 设置代码注释的格式
stringstyle=\rmfamily\slshape\color[RGB]{128,0,0}, % 设置字符串格式
showstringspaces=false, % 不显示字符串中的空格
%frame=none,
frame=shadowbox, % 显示背景边框;不显示用none
%framerule=0pt,
backgroundcolor=\color{white}, % 背景颜色
rulesepcolor=\color{red!20!green!20!blue!20}, % 阴影颜色
%Stata 关键词设定
morekeywords={use,regress,reg,sum,display,dis},
emph={clear}, emphstyle=\color{CPPViolet},
}
接下来可以通过在 stata-lstlisting.tex
中添加更多的关键词。当然不要忘记使用 \input{stata-lstlisting.tex}
来调用stata-lstlisting.tex
代码。
在上述的设定工作全部完成之后,我们就可以把自己想要编译的 Stata 代码放在lstlisting
环境中编译了,譬如:
{\setmainfont{Courier New Bold} % 设置代码字体
\begin{lstlisting}[language=Stata, numbers=none] % 设置编译的代码语言以及去除代码行索引编号
. display binomialp(4, 2, 1/6)
.11574074
. regress exp age ownrent income incomesq
use auto, clear // 导入数据
reg price wei
* 更复杂的情形
/* 另一个评论*/
bysort rep78: reg price wei `controls' i.foreign, vce(robust)
dis "Stata 语法高亮设置"
\end{lstlisting}}
就可以实现如下效果:
6. 结论
本文介绍了一些在Latex中高亮 Stata 代码的一些方法,并对比了他们各自的优劣。正如本推文开篇所言,代码高亮可以增强人们对于代码的可读性,从而节省大量的时间,提高工作学习的效率。大家不妨选择其中一种自己喜欢的方法,来给自己的 Stata 代码穿上一件漂亮的衣裳吧。
7. 参考文献
Haghish, E. F. 2019. "On the importance of syntax coloring for teaching statistics." The Stata Journal 19 (1): 83-86. -PDF-
Green, T. R. G. 1989. Cognitive dimensions of notations. People and Computers V:443–460. -PDF-
Green, T. R. G., and M. Petre. 1996. Usability analysis of visual programming environments: A ‘cognitive dimensions’ framework. Journal of Visual Languages & Computing 7: 131–174. -PDF-
Hendrix, T. D., J. H. Cross, II, L. A. Barowski, and K. S. Mathias. 1998. Providing enhanced visual support for software development and maintenance. In Proceedings of the 36th Annual Southeast Regional Conference. -PDF-
Cross, J. H., T. D. Hendrix, K. S. Mathias, and L. A. Barowski. 1999. Software visualization and measurement in software engineering education: An experience report. In Proceedings of the 29th Annual Frontiers in Education Conference. -PDF-
Stata与LaTeX的完美结合
8. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh latex
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:结果输出 Stata:输出漂亮的LaTeX表格-T222 Stata结果输出:Excel结果表变身LaTeX表格 Stata与LaTeX的完美结合 Stata结果输出:用esttab生成带组别名称的LaTeX回归表格 专题:Markdown-LaTeX LaTeX小技巧:简单实用的Beamer模板 用VScode正则表达式转换Markdown和LaTeX链接 DAG-有向无环图:如何用LaTeX快速绘制?-B017- LaTeX小白入门:TeXLive安装及使用 Stata+LaTex:绘制流程图 Markdown教程之LaTeX数学公式简介 Markdown常用LaTex数学公式 Markdown中书写LaTeX数学公式简介 专题:工具软件 LaTeX-如何使用Overleaf生成PPT LaTeX-如何使用 Overleaf 撰写论文 Word,MathType与LaTeX公式
课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
🍓 课程主页:https://gitee.com/lianxh/YGqjp
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【**百度一下:**连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。