查看原文
其他

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

连享会 连享会 2022-05-29

👇 连享会 · 推文导航 | www.lianxh.cn

连享会 · 效率分析专题

作者: 陈卓然 (中山大学岭南学院)
邮箱:  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 与 的完美结合" -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 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【**百度一下:**连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存