语法高亮:LaTeX中的彩色Stata代码

发布时间:2022-05-07 阅读 1999

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者: 陈卓然 (中山大学岭南学院)
邮箱: chenzhr25@mail2.sysu.edu.cn

编者按: 本文部分摘译自下文以及连老师的 Stata2Latex 讲义,特此致谢!

Source:

  1. Haghish, E. F. 2019. "On the importance of syntax coloring for teaching statistics." The Stata Journal 19 (1): 83-86. -PDF-
  2. 连玉君. 2007. "Stata 与 LATEX 的完美结合" -PDF-


目录


1. 引言

(Green 1989; Green and Petre 1996)指出代码高亮可以增强人们对于代码结构的感知,同时也可以提高代码的可读性 (Hendrix et al. 1998; Cross et al. 1999). 传统上在 LATEX 中插入 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 和 LATEX 中的语法,完美解决了上述命令无法解决的问题。

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

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh