分类 技术志 下的文章

在TeX文档中插入源代码

近期有了在TeX文档中插入源代码的需要。TeX的\verbatim可以帮助你保留输入text的原始格式,但用于输入源代码还是显得不够专业。Google了一下发现TeX中支持插入源代码的包也有不少,如LGrind、Listings等。LGrind似乎没有包含在TeX Live的默认安装包中,用apt-get尝试安装LGrind,发现居然要占用近200M的空间,遂放弃之,最后我选择了Listings宏包。

Listings宏包短小而强大,其典型应用方式如下:

\usepackage{listings}
\lstset{…}

\begin{lstlisting}
#include
int main(int argc, const char *argv[]) {
    printf("Hello World!\n");
    return 0;
}
\end{lstlisting}

\lstinputlisting{HelloWorld.c}

其中\lstset用于全局设置插入源代码的类型、各种语法元素的样式、边框和行号设置。你的源码只需包裹在\begin{lstlisting}和\end{lstlisting}之间,源码就能按照之前设置的格式显示。\lstinputlisting支持将一个独立的源代码文件load进来,并按\lstset的格式显示。下面是一个插入C语言源码的例子:

\lstset{ language={[ANSI]C},
         showspaces=false,
         showtabs=false,
         tabsize=4,
         frame=single,
         framerule=1pt,
         framexleftmargin=5mm,
         framexrightmargin=5mm,
         framextopmargin=5mm,
         framexbottommargin=5mm,
         %numbers=left,
         %numberstyle=\small,
         basicstyle=\tt,
         directivestyle=\tt,
         identifierstyle=\tt,
         commentstyle=\tt,
         stringstyle=\tt,
         keywordstyle=\color{blue}\tt }

\begin{lstlisting}
#include
int main(int argc, const char *argv[]) {
    printf("Hello World!\n");
    return 0;
}
\end{lstlisting}

上面lstset中每种语法元素的style都设置为\tt。说到\tt,就不能不提到西方字母字族的种类,分为serif、sans serif和monospace三类。其中serif来源于荷兰语, "衬线"的意思,又称为Roman,一般用于正文的主字体,感觉很正式,我们常用的"Times New Roman"字体就归于此族; sans serif中的sans来源自法文,意为“非”,这类字体比较平滑,字体较大,适于在标题中使用,如"Arial"字体。monospace是等宽字族,也称为typewriter,程序源代码用此族字体表示更为美观,常见的字体包括Courier New、Lucida Console等。其中\tt指的就是使用monospace字族; \rm表示使用serif字族,\sf则是使用sans serif字族的意思。

确定了字族后,我们可以通过TeX preamble区的字体设置得知具体的字体,如在上面例子中,我们是这么设置字体的:
\setCJKmainfont{WenQuanYi Micro Hei}
\setCJKsansfont{WenQuanYi Micro Hei}
\setCJKmonofont{WenQuanYi Micro Hei}

\setmainfont{Times New Roman}
\setsansfont{Arial}
\setmonofont{Courier New}

CJK相关的字体设置影响的是中文字体,而真正对代码起作用的是后面的英文字体设置。这里我们的mono字体设置为了"Courier New",这样我们的源码就会以Courier New的形式展现出来。

我更新了之前制作的book和ppt的TeX模板,以支持插入源代码,有意者可在此下载

尝试博客搬家

早在若干年前就有朋友建议我搭建一个独立博客,可当时的我觉得blogbus提供的服务很不错,自己没有必要去折腾,费钱又费力,所以我选择了继续留在blogbus。

这两年blogbus服务一直在不断的提高,自己也一直很欣赏blogbus的简单、清新、无广告的风格,大巴后台管理中心的功能也变得越来越强大了。不过这期间blogbus也出现过几次较为严重的故障,导致长时间的无法提供服务。上周blogbus再次出现文件服务器故障,导致上传的图片不能正常显示。这次我做了另外一个选择:尝试搬家。之所以称为“尝试搬家”,是因为搬家可能成功,也可能失败。

上周末经朋友推荐,我购买了dreamhost的主机空间,注册了独立域名,并花了周末两天的时间搭起了一个wordpress博客,这个过程是一波三折,还好我的这位朋友是建站方面的高手,经他指点,我少走了许多弯路。但博客搬家最难的地方不是建站,而是后续数据的迁移和整理。

搬家过程大致如下:

1、创建mysql数据库;

2、安装wordpress;

3、从blogbus后台管理中心将数据导出,导出一个blogbus自定义格式的xml文件;

4、下载bus2wp.py

5、按照bus2wp.py的说明,执行bus2wp.py将blogbus自定义格式的xml文件转换成wordpress标准xml文件;

6、转换后的wordpress数据文件有4M多,我用DivXml将该文件拆分成四个1M左右的xml文件;

7、通过wordpress后台提供的导入功能将数据文件导入

这里我安装的wordpress是2.8.6中文版(据说高版本的wordpress再导入bus2wp.py转换后的数据时会出现各种各样的问题)。导入过程很顺利,导入的大部分数据的格式都还是可接受的。

8、选择wordpress themes

2.8.6版本wordpress默认的Kubrick主题我一眼就看中了,不过该主题页面宽度不足,看起来很别扭,遂自己查资料,终于找到了一个Wide版的Kubrick的主题,下载后,替换了默认的主题。

9、安装必要插件

wordpress做得很强大,插件很多,根据朋友和网上推荐安装了Akismet、Add Post URL、Google XML Sitemaps、WP-Syntax和WordPress Database Backup等这几个插件。虽说安装过程都很简单,但是每个插件都要配置和测试,还是耗费了我不少精力。

10、整理文章

这是最痛苦的事。wordpress自带的默认编辑器很不给力,在“可视化编辑器”和“HTML编辑器”之间切换居然还会导致格式变化,导致刚整理好的格式瞬间丢失,还得重来,很痛苦。另外我还是一个追求完美的人,我最初计划将搬来的600多篇博客文章都整理一遍,修改每篇文章的永久链接地址、重新分配标签、更改文章内容中的所有链接(指向新博客站点中的文章),可昨天刚整理了三篇文章,我就发现这几乎是一个不可能完成的任务,我目前确实没有精力折腾这些事儿。

到此为止,我开始反思:我真的需要这样一个独立博客吗?独立博客有诸多好处,这个不用我说。但是这些好处中哪些是我真正需要的呢?顶级域名和稳定服务也许是我更看重的。但是国外提供的虚拟主机空间就一定比大巴稳定么?这个用过才知道,我还没有发言权。至于顶级域名其实blogbus也可以做绑定。

整理数据的这几天耗费了我很多精力,很多事情都因此耽搁了。我决定不再整理了,本次尝试搬家宣告失败!继续遵循多年前的那个选择:只要blogbus还继续提供服务,我就一直扎根这里。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats