Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

add context in local disk

  • Loading branch information...
commit 53393df00e72208343c417e7d2fbcfb7dacd0774 1 parent 4c4b5a0
@larrycai authored
View
6 latex/config.yml
@@ -1,5 +1,5 @@
default:
- title: Softwate Development Boot Camp
+ title: Learn writing opensource book
font: Liberation Serif
bold: "{* Bold}"
mono: Liberation Mono
@@ -13,9 +13,9 @@ default:
fig: "Figure "
tab: "Table "
indent: "\\qquad"
- thanks: "This is the PDF file for the Software Development book contents. It is licensed under the Creative Commons Attribution-Non Commercial-Share Alike 3.0 license. I hope you enjoy it, I hope it helps you learn the software development, and I hope you'll continuously watch this : \\url{http://github.com/larrycai/sdcamp}, will be happy if you follow my weibo \\url{http://weibo.com/larrycaiyu}, and if you want to donate, please visit: \\url{https://me.alipay.com/larrycai}"
+ thanks: "This is the PDF file for the how to write opensource book contents. It is licensed under the Creative Commons Attribution-Non Commercial-Share Alike 3.0 license. I hope you enjoy it, I hope it helps you learn the software development, and I hope you'll continuously watch this : \\url{http://github.com/larrycai/kaiyuanbook}, will be happy if you follow my weibo \\url{http://weibo.com/larrycaiyu}, and if you want to donate, please visit: \\url{https://me.alipay.com/larrycai}"
zh:
- title: 跟我学企业敏捷开发
+ title: 跟我学开源技术书
langrule: "\\XeTeXlinebreakskip=0em plus 0.1em minus 0.01em\n\\XeTeXlinebreakpenalty=0"
font: AR PL SungtiL GB
bold: WenQuanYi Micro Hei
View
4 latex/makepdf
@@ -184,8 +184,8 @@ figures do
end
unless abort
- print "\tMoving output to sdcamp.#{lang}.pdf... "
- mv("#{dir}/main.pdf", "#$root/sdcamp.#{lang}.pdf")
+ print "\tMoving output to kaiyuanbook.#{lang}.pdf... "
+ mv("#{dir}/main.pdf", "#$root/kaiyuanbook.#{lang}.pdf")
puts "done"
else
print "\tConvent error, exit !"
View
2  makepdfs
@@ -42,4 +42,4 @@ echo
echo "The generation process will start now."
${baseDir}/latex/makepdf $argString
-# pdftk A=ebooks/cover.pdf B=sdcamp.zh.pdf cat A1 B2-end output sdcamp.zh.book.pdf
+# pdftk A=ebooks/cover.pdf B=kaiyuanbook.zh.pdf cat A1 B2-end output kaiyuanbook.zh.book.pdf
View
64 zh/01-introduction/01-chapter1.markdown
@@ -1,64 +0,0 @@
-# 前言 #
-
-对于一个刚加入企业的人来说,一个急切想知道的问题是,企业的软件开发到底是什么?
-
-这本小册子就用40页左右的内容把企业软件开发的方方面面给介绍一下。既然取名为”跟我学“,就表明它是比较浅显的,很容易通过实践来了解。又由于比较薄,很多知识点只是入门而已,需要看许多的参考资料才能掌握的。
-
-但同时也不代表里面的东西是很浅薄的,恰恰相反其中的内容应该是最前沿的,最能体现什么是真正的敏捷开发。
-
-## 特色 ##
-这里边讲到的内容我们早已经在公司实践多次,特别适合刚加入企业的新员工,来快速地熟悉企业所使用的实践技术。
-
-每一章内容都配备足够的练习,通过练习使员工掌握后面的理论知识,来一步步地了解软件开发的各个角落。
-
-每章内容都是精心挑选的,难度适当。各章之间都有很好的衔接,也可独自成为一个知识点,可以独立章节学习,当然更加推荐连续学习。
-
-### 背景 ###
-我是喜欢自由,喜欢分享的技术爱好者。愿意分享我们公司培养新人敏捷开发的方式,期望你们能少走弯路。
-
- 1. 站得高,看得远。要一开始就学习最新的开发方式,不要一下子就陷入到老的环境中。
- 2. 养成团结开放的心态。现在软件是开放的世界,需要多人合作,要勇于共享,不断进步。
-
-总之,特别想用我们的经验来告诉埋头苦干的人,要站在巨人的肩膀上。
-
-### 适合的对象 ###
-主要针对刚入职企业的新人,也适合对敏捷开发感兴趣的技术经理。
-
-## 本书结构 ##
-从第二章到第七章,每章都对应一门2-3小时的课,第八章是单独的一天来实践项目开发。第九章是附录,是公司如果采用本书安排的一个模板。
-
- * 第二章:敏捷开发和Scrum
- * 第三章:版本控制Git和代码审阅Gerrit:使用分布式系统Git与Gerrit系统
- * 第四章:持续集成:使用Jenkins、Maven、Java项目
- * 第五章:如何写好Java程序:Java的覆盖率,单元测试,重构,测试驱动开发
- * 第六章:需求管理和实例化需求Specification by example
- * 第七章:用Cucumber来实例化需求
- * 第八章:项目实践:Game of life
-
-## 如何使用本书 ##
-这本小册子是公司培训的参考手册,一般应该有专业的老师准备好对8-10人的团队进行指导。
-
-当然你可以照着自学,多看看参考资料,毕竟这是一本软件开发的入门书,高度够了,深度不够。
-
-## 小结 ##
-
-4天的学习会很有意思,学完后,你会意识到在企业中你再也不可能什么都会,要抛弃单兵独斗的想法,要学会团队合作,更要持续地学习提高。而且要有激情,否则什么都学不到。
-
-准备好了吗?
-
-## 如何写作本书的 ##
-本书也是用敏捷的方式来写作的,我在Windows(希望早日能用MBA)用Notepad++编辑器用Markdown的文本文件写内容,然后在共享目录的虚拟机中,一个命令生成所有的其他格式(如PDF、mobi、epub);Git是我使用的版本控制系统。你可以看看我在图灵写的文章[开源书和开源技术-Markdown篇](http://www.ituring.com.cn/article/828)
-
-本地测试通过后,我会提交到github中去,同时架设了持续集成服务器,会对我最新内容再次检测,自动产生电子书。
-
-自从花了一周时间写出第一版后,我就力争持续发布。
-
-我一直在纠结本书的深度和广度。
-
-### 封面 ###
-因为自己爱好设计排版,就自己DIY了一下,封面是瑞典南部波罗的海沿岸的一处风景,用Windows PowerPoint制作完成。
-
-## 致谢 ##
-特别感谢许晓斌(@juvenxu)在结构和方向上给了我很多的建议。
-
-感谢李任、王艳、晁立山、梅一对本书做了早期的审阅。
View
36 zh/01-preface/01-chapter1.markdown
@@ -0,0 +1,36 @@
+# 前言 #
+
+互联网是自由、开放、分享、平等的世界。开源软件已经深入人心,并也形成了极好的商业模式。
+
+我们为什么不能把开源技术书做成像开源软件一样呢?
+
+这本小册子就用60页左右的内容把开源技术书的几个方面介绍一下,使得你也能写出你的开源技术书。
+
+### 背景 ###
+值得码字处。
+
+### 适合的对象 ###
+主要针对爱分享的技术爱好者,也适合编辑老师们了解Geek是怎么玩书的。
+
+## 本书结构 ##
+
+ * 第一章:前言
+ * 第二章:基础知识和10分钟写出第一本开源书
+ * 第三章:Markdown格式
+ * 第四章:Latex简介
+ * 第五章:其他。。
+
+### 封面 ###
+因为自己爱好设计排版,就自己DIY了一下,封面是随手找到的矢量卡通图,并用Windows PowerPoint制作完成。
+
+## 如何写作本书的 ##
+本书也是用敏捷的方式来写作的,我在Windows(希望早日能用MBA)用Notepad++编辑器用Markdown的文本文件写内容,然后在共享目录的虚拟机中,一个命令生成所有的其他格式(如PDF、mobi、epub);Git是我使用的版本控制系统。
+
+本地测试通过后,我会提交到github中去,同时架设了持续集成服务器,会对我最新内容再次检测,自动产生电子书。
+
+这些你都可以在后面学到,啰嗦了。
+
+## 致谢 ##
+特别感谢...。
+
+感谢..对本书做了早期的审阅。
View
92 zh/02-agile/01-chapter2.markdown
@@ -1,92 +0,0 @@
-# 敏捷开发和Scrum #
-敏捷软件开发越来越流行了,而且基本深入人心。技术水平高的人尤其推崇。
-
-当我们学习编程时,本性都是敏捷的,谁都不想浪费时间。只是进入企业(不管大小)后,由于管理的需要,产生了不必要的浪费。
-
-瀑布V模型在早期开发周期长,需求变化少的情况下还是很不错的,只是互联网时代软件开发技术日新月异,更新越来越快,这又不得不回到原来的思想,精简管理来降低浪费。
-
-由此不要抱怨敏捷,它只是揭开了软件开发的遮羞布而已。
-
-敏捷是由很多技术实践结合在一起的,依靠有经验的开发者去实施。
-
-## 工作环境 ##
-不需要电脑,积极回答问题,并多多提问。
-
-## 简单历史 ##
-敏捷这个术语早期有人叫轻量级(lightweight)软件过程,来区别于CMM、RUP等重量级软件过程。后来又觉得本质不是轻重的问题,所以又改成敏捷(Agile)。
-
-Insert 18333fig0201.png
-图 2-1. 敏捷宣言
-
-敏捷的技术实践在敏捷出现前就出现了,如持续集成,代码共享,结对编程。甚至是那些敏捷流派,如XP、Scrum、FDD都早就有了。只是这些技术先驱们觉得单打独斗太累,因此在一次聚会中一起创建了敏捷宣言[^1]。
-
-### 敏捷流派 ###
-从2004年起,敏捷开始展露锋芒,主要原因是恰好互联网企业需要快速开发,快速交付。他们就顺理成章地采用了敏捷的方式。
-
-同时传统企业开始感受到了压力,碰到了问题,需要改进了,看看别人都敏捷了,开始跟风(褒义)了,这就碰到了选择的问题。记住,只有等你到了一定的水准后,才能无招胜有招。早期还是要学些固定套路的,这些套路就是不同的敏捷开发过程。
-
- * XP(极限编程)较早出现在中国的原因,得益于当初翻译的几本书(2001年),不过有点极端了,很多传统企业都不能适应。
- * Scrum是一个框架,概念清晰,比较容易上手(狡猾),当然它还是得和其他实践同步开展。不管怎么样,Scrum越来越流行了;当然骂声也不少,认为它什么都没讲,太虚了。
- * FDD(Feature Driven Development)等还有一些其他的过程,声音慢慢就越来越少了。猜想商业是一方面,推动者的能力或兴趣也是一方面。
-
-这里,我们主要以Scrum来讲解敏捷,但千万别以为Scrum就是敏捷。可以阅读相关知识来了解更多的敏捷。
-
-## Scrum 基本知识 ##
-Scrum[^2]是迭代式增量软件开发过程,也是一种敏捷软件开发的框架,通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球。
-
-### 基本角色 ###
-Scrum是一个包括了一系列实践和预定义角色的过程框架。Scrum中的主要角色包括:
-
- 1. **Scrum Master**是来确保团队合理的运作Scrum,并帮助团队移除实施中的障碍。
- 2. **产品负责人(PO: Product Owner)**,确定产品的方向和愿景,定义产品发布的内容、优先级及交付时间,为产品负责。
- 3. **开发团队(Team)**,一个跨职能的小团队,人数5-9人,团队拥有交付可用软件需要的各种技能。
-
-Insert 18333fig0202.png
-图 2-2. Scrum框架
-
-### 框架过程 ###
-在每一个Sprint(两到四周的周期,其长度由开发团队决定)当中,开发团队创建可用的(可以随时推出)软件的一个增量。每一个Sprint所要实现的功能来自**产品待办事项列表(Product Backlog)**
-
-产品待办事项列表是按照优先级排列的要完成的工作的概要需求,在团队的**计划会议(Planning meeting)**中,PO给出各个功能的优先级,开发团队一起决定在下一次Sprint中他们能够承诺完成多少功能,这就形成了**Sprint待办事项列表(Sprint backlog)**
-
-在Sprint过程中,没有人能够变更Sprint待办事项列表,这意味着在Sprint中需求是被冻结的(No Change)。
-
-**每日站立会议(Daily standup meeting)**一般定在早上,持续10分钟左右,每个团队成员需要回答三个问题来了解整个的运行情况和潜在的风险:
-
- 1. 昨天你完成了那些工作?
- 2. 今天你打算做什么?
- 3. 完成你的目标是否存在什么障碍?
-
-在Sprint结束时,会有一个**评审会议(Review meeting)**来检查一下功能是否按照产品负责人要求地完成了,质量应该是由团队保证的,而不是产品负责人或其他人负责。
-
-评审会议后的**回顾会议(Retrospective meeting)**是团队自己帮助自己发现问题,并提出行之有效的方式进行提高,所以这不是由其他人来组织的。
-
-### 常用的实践 ###
-管理Scrum过程有很多实施方法,如即时贴(yellow stick)、燃尽图(burndown chart )、白板(whiteboard)。Scrum最大的好处之一是它非常容易学习,而且启动Scrum应用并不需要太多的投入。
-
-Insert 18333fig0203.png
-图 2-3. 每日例会中的任务白板(图来自《硝烟中的Scrum和XP》一书)
-
-## 相关知识 ##
-敏捷这个范畴很大,在过程这个方面,建议看看XP和Lean、看板等内容。
-
-## 课后练习 ##
-学会使用白板来做团队任务的分配,并且开始体会团队合作和企业中的工作任务和以前的不同。
-
- 1. 在Wiki系统中,各自创建自己的个人主页。
- 2. 敏捷团队到底要不要Team leader,简单阐述想法,记录在Wiki中。
- 3. 一个敏捷团队几个人是最适合的,简单阐述想法,记录在Wiki中。
- 4. Scrum周期多长是最合适的,简单阐述想法,记录在Wiki中。
-
-## 总结 ##
-敏捷听起来很虚,但是实际上回归了软件开发的本质,关注需求,团队合作,不断进步。
-
-## 参考 ##
- 1. 硝烟中的Scrum和XP: http://www.infoq.com/cn/minibooks/scrum-xp-from-the-trenches
- 2. 看板和Scrum——相得益彰:http://www.infoq.com/cn/minibooks/kanban-scrum-minibook-cn
- 3. 你的Scrum检查列表:http://www.infoq.com/cn/minibooks/scrum-checklists-cn
- 4. What is scrum? http://www.scrumalliance.org/pages/what_is_scrum
-
- [^1]: http://agilemanifesto.org/iso/zhchs/
- [^2]: http://zh.wikipedia.org/wiki/Scrum
-
View
96 zh/02-introduction/01-chapter2.markdown
@@ -0,0 +1,96 @@
+# 基础知识和10分钟写出第一本开源书 #
+## 先从Pro Git说起 ##
+
+如果你了解Git,或者想了解Git。那么你就应该知道[Pro Git](http://progit.org/),它是Git的书中写得最好的一本(至少是之一),可是你是否知道它有网络中文版,而且能在iPad上极其漂亮得阅读。并且是免费的,不是盗版的免费!如果你想要最新的,你甚至可以自己生成它。哈哈,我就是这么干的。
+
+这一切就归功于开源社区和它后面用到的技术。
+
+###开源书###
+这里我不用多讲,开源书就像其他的开源产品(如维基百科)一样,只要是开放的,社区就有人会贡献。[Pro Git](http://progit.org/)的作者Scott很慷慨得把书的内容全部共享在[github/progit](http://github.com/progit/progit)库中,使用得是[CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/us/)。
+
+Scott只负责英文版,其他许许多多语言的翻译都是社区贡献的,中文翻译相当有质量,你可以在线读[Pro Git中文版](http://progit.org/book/zh/)。
+
+### 开源技术生成电子书 ###
+这本书不仅仅开源了内容,使用的技术也是开源的。让我们看看他是怎么做的。
+
+### markdown原始文件 ###
+首先书的内容是用markdown格式写的。markdown格式的普及要归功于[Github](github.com)和[StackOverflow](http://stackoverflow.com/)。因为它们越来越流行,它们支持markdown格式也越来越流行。这里要赞一个的是,国内的[图灵社区](http://www.ituring.com.cn/)也支持markdown,用起来超级方便。
+
+简单来说,markdown格式的文件看着像一般的文本文件,里面只是加了很少的格式标记,因此看文本文件也不影响理解,这种格式也有很多工具帮你去转化,而且很容自动化解决。并且这些技术大多数是开源或免费的。
+
+你可以直接看一下【Pro Git】的[“第一章 介绍” 的markdown原始文件](https://raw.github.com/progit/progit/master/zh/01-introduction/01-chapter1.markdown),顺便看看github自动生成的简单[“第一章 介绍” 的html](https://github.com/progit/progit/blob/master/zh/01-introduction/01-chapter1.markdown)。
+
+## 产生电子书 ##
+### epub/mobi格式 ###
+Ruby的[rdiscount](https://github.com/rtomayko/rdiscount)帮你从markdown转成html格式,然后有[Calibre](calibre)附带的命令`ebook-convert`生成最终的`.mobi` (Kindle) 和 `.epub` (iPad)。
+
+### PDF格式 ###
+为了能达到出版的质量,Latex是一个常用的格式,PDF也能很容易的产生出来,有关Latex,自己看看参考链接学习吧。
+
+[pandoc](http://johnmacfarlane.net/pandoc/)能帮着从markdown转换出latex格式,然后[TexLive](http://www.tug.org/texlive/)软件中的`xelatex`再转成PDF格式。
+
+## 工作环境 ##
+你只需要一台Linux机器(虚拟机就可以了)和熟悉简单的Linux命令就可以试验了。有git和Ruby的知识那就更方便了。
+
+我用的试验环境是Ubuntu Oneiric (11.10)
+
+### 下载中文开源书 ###
+很简单,`git clone`一下这本书就可以了,下载它的源文件包我觉得还是烦了点。
+
+ $ git clone git@github.com/larrycai/kaiyuanbook.git
+
+### PDF格式 ###
+生成PDF是一个比较复杂的东西,[pandoc](http://johnmacfarlane.net/pandoc/)用Ubuntu库里的,[TexLive](http://www.tug.org/texlive/)用缺省Ubuntu源里的2009版也够了。当然也可下载最新的[TexLive](http://www.tug.org/texlive/)包安装,并配置到搜索路径中。
+
+~~~~~~~~~~ {.bash}
+$ sudo apt-get install pandoc
+$ sudo apt-get texlive-xelatex
+$ sudo apt-get texlive-latex-recommended # 主要的Latex包
+$ sudo apt-get texlive-latex-extra # titlesec包,先不用知道
+~~~~~~~~~~~~~~~~~~~~
+
+因为是中文PDF,需要把字体嵌入在文件中,因此需要安装字体文件,幸运的是在源里有不错的字体。
+
+~~~~~~~~~~ {.bash}
+$ sudo apt-get install ttf-arphic-gbsn00lp ttf-arphic-ukai # 文鼎字体
+$ sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei # 文泉驿字体
+~~~~~~~~~~
+
+现在你就可以生成pdf文件了。
+
+ $ ./makepdfs zh
+
+怎么样,打开看看,很漂亮[^1]了吧。
+
+## 自己试试 ##
+一定要做,搜索一下,改掉一些内容,再运行一遍。
+
+好了,你可以把书扔到一遍,写你自己的书了。照样画葫芦,你行的。
+
+### epub/mobi格式 ###
+做电子书相对简单一点,因为要求没有PDF的高,[calibre](http://calibre-ebook.com/)就可以满足了。
+
+如果装的Ubuntu是服务器版的(没有X-Windows),建议安装[xvfb](http://en.wikipedia.org/wiki/Xvfb)无头(headless)X服务器,因为不知道什么原因有几个命令需要。XMing还不行,因为需要`X-Input`
+
+ $ sudo apt-get install ruby rubygems # ruby 1.8.7 is used
+ $ sudo apt-get install calibre # calibre 0.7.44 for ubuntu 11.04
+ $ gem install rdiscount ruby-debug
+ $ xvfb-run ./makeebooks zh # 缺省.mobi格式
+ $ export FORMAT=epub
+ $ xvfb-run ./makeebooks zh # .epub格式
+
+## 其他常用的格式 ##
+
+计算机类图书对格式要求不是很多,图文、章节、源代码基本就够了,就算有些复杂公式,也可用图来显示。这也从理论上说明,它不需要复杂的格式。现在对这类技术书出版我的理解主要有几种:
+
+ 1. Microsoft的Word格式,虽然国内出版界如日中天,缺省就认它(对技术没追求,鄙视)。简单好学,但是不擅长自动化,是开源的死敌。
+ 2. Latex格式(就是Donald E. Knuth(高德纳)发明的,这是很棒的东西,特别适合学术类的各种复杂的公式等,不过学习曲线很高,国内也只有几家学术期刊使用。
+ 3. docbook格式是最有名的(从SGML演化过来?),Orielly和Pragmatic出版社缺省就用它,它能 很方便的转化出出版要的各种样式。如[Jenkins - the definition guide](http://www.wakaleo.com/books/jenkins-the-definitive-guide)开源书就是采用docbook。但由于是XML格式,很多人不习惯,而且多人网上协作不是很方便。
+ 4. 通过蒋鑫的[Got Github](http://www.worldhello.net/gotgithub/)开源书,我也了解reStructureText也是和markdown差不多纯文本(plain text)的,也是蛮流行的。
+
+## 参考 ##
+ 1. Pro Git: <http://progit.org/>
+
+ [^1]: 颜色我自己调的,喜欢吗?这是脚注的演示。
+
+
View
0  zh/02-agile/README → zh/02-introduction/README
File renamed without changes
View
23 zh/03-markdown/01-chapter3.markdown
@@ -0,0 +1,23 @@
+# Markdown #
+## 介绍 ##
+
+Markdown格式的普及要归功于[Github](github.com)和[StackOverflow](http://stackoverflow.com/)。因为它们越来越流行,它们支持markdown格式也越来越流行。
+
+简单来说,markdown格式的文件看着像一般的文本文件,里面只是加了很少的格式标记,因此看文本文件也不影响理解,这种格式也有很多工具帮你去转化,而且很容自动化解决。并且这些技术大多数是开源或免费的。
+
+最基本的Markdown:<http://daringfireball.net/projects/markdown/>
+
+由于会有Pandoc转换,我建议推荐用Pandoc的markdown扩展
+
+### Github的Markdown ###
+<http://github.github.com/github-flavored-markdown/>
+
+### Pandoc Markdown ###
+<http://johnmacfarlane.net/pandoc/README.html>
+
+## 如何使用Markdown写书 ##
+..
+
+## 参考 ##
+ 1. Pro Git: <http://progit.org/>
+
View
283 zh/04-latex/01-chapter4.markdown
@@ -0,0 +1,283 @@
+# 了解Latex的知识 #
+## XETEX文稿基本格式 ##
+如果需要高质量的书稿,Latex还是非常适合的,至少比Word上档次。这一章用简单的笔墨[^41]给一个简要介绍。
+
+## XETEX文稿基本格式 ##
+文稿(即用于排版的源文件)包含两部分内容:一部分是正文,也就是需要排版输出的 内容;另一部分是排版控制命令,用于控制版面式样,字体,字形等格式. TEX 文稿通常 以 tex 为文件扩展名.
+
+排版控制命令是以反斜线" \ "开头的字串.有一些排版控制命令带有一些参数,由参 数来修改其默认行为.排版控制命令的参数有些属于可省略的,有些属于不可省略的.在排 版控制命令中,可省略的参数(若不提供这些参数, LeTEX 采用默认参数)置于方括号中,不 可省略的参数(必须要提供的参数)置于花括号中.具体格式可表示如下:
+
+~~~~~ {.latex}
+\命令名[可省略的参数]{不可省略的参数}
+~~~~~~
+
+XETEX / LaTEX 的纯西文的文稿基本格式如下:
+
+~~~~~~~ {.latex}
+\documentclass[11pt,a4paper]{article}
+\begin{document} Hello World!
+\end{document}
+~~~~~~~~~~~~~
+
+上面的文稿中,排版控制命令 \\documentclass 的可忽略参数告诉 LATEX 系统,用户使用的是 A4 纸( a4paper ),正文字体为 11pt ,接近中文五号字;不可忽略参数告诉 LeTEX ,用户要撰写一篇论文,这样 LeTEX 系统便会为用户准备好论文排版的默认环境。
+
+除了论文类别, LeTEX 还提供了书籍( book ),书信( letter ),报告( report )等. 排版控制命令 \\begin{document} 与 \\end{document} 表示文稿内容的起始与终止. 在 \\documentclass 与 \\begin{document} 之间的区域称为导言区,可在此区域内放置 一些可影响文档整体排版样式的控制命令.
+
+XETEX/LaTEX 的中文文稿与西文文稿没什么区别,仅仅是文稿内容中使用的是中文, 如下:
+
+~~~~~~~~~
+\begin{document}
+世界,你好!
+\end{document}
+~~~~~~~~~~
+
+## XETEX 中文文档处理 ##
+对 XETEX / LaTEX 可使用 xelatex 命令处理生成 pdf 文档:
+
+$ xelatex filename.tex
+
+现在,假定上一节中组为示例所列举的中文 XETEX / LaTEX 文稿的文件名为 example.tex ,使用 xelatex 命令处理该文稿可以生成 example.pdf 文档,但是使用 pdf 阅读 器打开 example.pdf ,就会发现这是一个空白文档,而没有如我们所预期的那样会在文档 中显示出"世界,你好!"这是因为 XETEX / LaTEX 并没有为中文文稿指定默认字体,这需 要我们自行设定。
+这也意味着一个很重要的问题: XETEX 项目解决了 TEX 国际化的问题, 而我们要解决 XETEX 本地化问题.但是目前,国内对 XETEX 很了解的人太少了,还未有人 提出通用的 XETEX 中文解决方案,因此要使用 XETEX 排出符合中文习惯的文章,就需要熟 悉一些 XETEX / LaTEX 宏包与排版控制命令.
+
+宏包 fontspec 可与 XETEX / LaTEX 配合使用可实现在 XETEX / LaTEX 文稿中使用系统自带字体的功能.在 XETEX / LaTEX 文稿中的导言区,使用 \\usepackage 指令可加载指定宏 包.加载 fontspec 宏包后,使用其提供的 \\setmainfont 命令可设定文稿正文中的中文字 体.对上一节中的中文 XETEX / LaTEX 文稿 example.tex 修改如下:
+
+~~~~~~~~~~~~
+\documentclass[11pt,a4paper]{article}
+\usepackage{fontspec}
+\setmainfont{Adobe Song Std}
+\begin{document}
+世界,你好!
+\end{document}
+~~~~~~~~~~~~
+
+字体设置命令 \\setmainfont 将 Adobe Song Std 指定为文档正文默认字体. Adobe Song Std 是 Adobe 发布 Adobe Reader 8.0 时附带的一款中文宋体,另外还有一款中文 黑体 Adobe HeiTi Std ,它们都是免费字体,可以自由使用.如果你没有装这两款字体, 可以使用 fc-list 命令查看系统已安装的字体名录,如下:
+
+~~~~~~~ {.bash}
+$ fc-list :lang=zh-cn
+文鼎PL简报宋,AR PL SungtiL GB:style=Regular
+文鼎PL中楷Uni,AR PL ZenKai Uni:style=Medium ... ...
+~~~~~~~~~~
+
+将 fc-list 输出结果中的字体名填到 \\setmainfont 命令中,即可使得 XETEX / LaTEX 在 系统字体目录下找到相应字体并将其嵌入到所生成的 pdf 文档中.虽然可以将 Windows 中 文字体挪到 Linux 下使用,但是现在许多自由抑或免费的中文字体已经可以满足中文排版 需要了,因此,我们应当尽量不要再去那些私权字体.
+
+现在,使用 xelatex 对修改后的 example.tex 进行处理,可以生成以中文五号宋体显 示"世界,你好!"的单页 pdf 文档.
+
+下面,继续进行中文字体的设置,对 example.tex 修改如下:
+
+~~~~~~~~~~~ {.latext}
+\documentclass[11pt,a4paper]{article}
+\usepackage{fontspec}
+\setmainfont[BoldFont=Adobe Heiti Std]{Adobe Song Std}
+\setsansfont[BoldFont=Adobe Heiti Std]{AR PL KaitiM GB}
+\setmonofont{Bitstream Vera Sans Mono}
+\begin{document}
+世界,你好!
+\end{document}
+~~~~~~~~~~~~~~~~
+
+在解释修改后的 example.tex 所发生的变化之前,我们应当了解一下有关字体的一些常识.
+西方国家的字母体系可分为两大字族( Font Family ): Serif 与 Sans Serif .除此 之外,还有一种打印机字体虽然也是 Sans Serif ,但由于它是等距字,所以又独立出一 个 Typewriter 字族. Serif ,中文常译为"衬线", Sans Serif 则译为"无衬线".衬线字体是源于古代 在一些岩石或金属上刻字时,雕刻刀在笔画的起落处要有入刀与退刀的讲究,不然会损伤刻刀.无衬线字体,是相对于衬线字体而言的.对于西文的衬线字体与无衬线字体的直观意象 可见:
+
+N N
+
+中文的字族可分为:隶,楷,行,宋,仿宋,黑,幼圆等,要与西文字族相对应(计算 机是西方文明的产物,汗),那么宋,仿宋都可以看作是衬线字体,而楷体,黑体,幼圆可以看作是非衬线字体.
+
+一旦理解了这些字体常识,对于 example.tex 中新增加的那几条设置中文字体的控制命令应该明白个三五分.譬如,\\setsansfont 指令是设定无衬线中文字体的,我们在 example.tex 中使用该指令将无衬线字体设置为楷体 AR PL KaitiM GB . \\setmainfont 是 设置衬线字体的,因为 XETEX 将衬线字体视为文档默认字体族,而 XETEX 之所以如此, 是因为在实践有一个结论:衬线字体作为文章的正文字体可使读者长时间阅读文章视觉 不疲倦.非衬线字体在文章中适合作为标题出现,因为它较衬线字体更为醒目,但如果用 无衬线字体作为文章的正文字体,长时间阅读,很容易出现视觉疲劳. fontspec 宏包还 提供了一个与 \\setmainfont 等价的命令 `\setromanfont` ,这完全是出于历史的缘故, 因为 Roman 字体在西方一向被认识是文章正文字体的正统,最有名的是 Times New Roman .
+
+下面讲一下 `\setmainfont`与`\setsansfont`指令中的可省略参数 BoldFont 的用法, 这个参数是用来指定衬线与非衬线字体在粗体( bold )状态下所使用的字体,这是因为字体 可以在常态下经"加粗"后所得到的实际上是另一种字体.对于任意一款计算机字体而言, 它不是一个你想怎么变就可以怎么变的东西,如果一款字体在设计的时候就不是粗体,那 么是不可能把它变成粗体的,只有用一种设计好的粗体去替换.虽然有一些办法可以让一 些字体经过微量平移并叠合后可以得到类似"粗体"的效果,但那是"穷人的粗体",显示 效果很差的.所以,我们不应该把你正在用的这个"宋体"变成"粗"宋体,而必须去找专 门的粗宋体来用.如果找不到粗宋体,那就用黑体来代替,本文的排版就是这么做的,采 用 Adobe Heiti Std 来作为衬线与非衬线的粗体. 字体设置完成后,就要考虑中文断行的问题.还是那句话, XETEX 只致力于解决国际 化问题,并不考虑本地化,如果说考虑了,那也只是默认考虑了西文本地化.西文的断行问 题是根据单词之间的空格来决定一行文本中在哪个单词的尾部断开产生新行的,对中文而 言,这种方法就不适用了,因为中文不是以空格来划分单词的.但不要以为 XETEX 不能很 好的处理中文断行,在 XETEX 内部已有人为中文断行写了一些规则,我们可以直接使用它们,可在 XETEX / LaTEX 的导言区中添加以下指令:
+
+~~~~~~~~~
+\XeTeXlinebreaklocale "zh"
+\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt
+~~~~~~~~~
+
+上述指令中,`\XeTeXlinebreaklocale` 指定使用中文断行规则,XeTeXlinebreakskip 可以 让 XETEX 处理中文断行时多一点点自适应调整的空间.
+
+Okay! 事实上,讲到这里,XETEX/LaTEX 的用法基本已讲述完毕, 剩下内容就是 TEX / LaTEX 的使用了,它们的许多教程都基本适用 XETEX / LaTEX ,只是有关 CJK 那 部分不适用.
+
+## 论文版式 ##
+一篇论文应该包括两个层次的含义:内容与表现,前者是指文章作者用来表达自己思想 的文字,图片,表格,公式及整个文章的章节段落结构等,后者则是指论文页面大小,边 距,各种字体,字号等.一篇排版良好的论文应当是内容与表现分离的.本节主要介绍如何使用 XETEX / LaTEX 定义论文的表现.
+
+### 准备纸张 ###
+首先准备纸张,在 `\documentclass` 的可省略参数中, A4 纸用 a4paper 表示, A5 纸 用 a5paper ,其他型号用纸的表示类推便是.如果在 `\documentclass` 指令中未指定纸张型号,则 XETEX / LaTEX 默认用纸是美国信纸(14 × 8.5in).
+
+纸张准备好了,然后就是设置基本字体尺寸.一般而言,中文小四号字用像素点为单 位表示为 12pt ,中文五号字表示为 11pt .基本字体尺寸的设定非常重要,譬如行距,段落缩进,页芯等参数, XETEX / LaTEX 会基于基本字体尺寸给出相应的默认值.基本字体 尺寸也是在`\documentclass` 指令中作为其可省略参数进行设定的,如果未设定该参数, 则 XETEX / LaTEX 会以 10pt 为默认值.
+
+现在,若要在一张 A4 纸上以 11pt 为基本字体尺寸写一篇论文, `\documentclass` 指令可写为:
+
+~~~~~~~~
+\documentclass[a4paper,11pt]{article}
+~~~~~~~~~
+
+XETEX / LaTEX 默认是纵向模式排版,要改为横向排版,可添加 `\documentclass` 命令 的可省略参数 landscape :
+
+~~~~~~~~~
+\documentclass[a4paper,11pt,landscape]{article}
+~~~~~~~~~~
+
+`\documentclass` 还有一些常用的可省略参数,比如 titlepage 可以让文章的标题 单独占据一页, notitlepage 可使标题与文章正文排在同一页面.又比如 draft 可以控制 XETEX / LaTEX 在超出页面宽度限制的文本行右端显示一个粗黑条,提醒用户注意,而 final 的作用恰好相反,无论文本行超出边界多少,也不显示粗黑条,但 XETEX / LaTEX 在 编译 TEX 文档时,会给出警告.
+
+### 设置页面边距 ###
+ 下面谈谈页边距的设置. MS Word 默认的页面边距为:
+
+>上边距=下边距= 1in (2.54cm)
+>左边距=右边距= 1.25in (3.17cm)
+
+使用宏包 geometry 可以进行 XETEX / LaTEX 文稿的页面边距设置:
+
+~~~~~~~
+\usepackage[top=1in,bottom=1in,left=1.25in,right=1.25in]{geometry}
+~~~~~~~
+
+实际上这样设置的页面边距极不美观,尤其是左右对称的页边距没有考虑装订的需要, 另外上边距如果加上页眉或就显得过窄.因此,要是真的很注重页面美观的话还是自己去调 整一下,比如我喜欢将页边距设置下面这样:
+
+~~~~~~~~~~~~~~
+\usepackage[top=1.2in,bottom=1.2in,left=1.2in,right=1in]{geometry}
+~~~~~~~~~~~~~~
+
+将左边距设置的比右边距大一些,主要是考虑装订的需要,但是在实际打印时有单面打 印与双面打印模式,在双面打印时,应该是奇数页面的左边距比右边距大一些,在偶数页则相反. XETEX / LaTEX 考虑到了这一点,在偶数页面中会自动将左,右边距切换.指定文稿 单双页面的参数有 oneside 与 twoside ,它们都是 `\documentclass`的可省略参数,如果 文稿类别是论文,默认是单面打印模式.
+如果相对 geometry 宏包的使用进行更详细的了解,请参考文献
+
+### 章节标题 ###
+
+可使用 titlesec 宏包设置章节标题.在引入 titlesec 宏包时,可以指定一些格式选项, 比如:
+
+~~~~~~~~~
+\usepackage[center,pagestyles]{titlesec}
+~~~~~~~~~
+
+其中 center 可使标题居中,还可设为 raggedleft (居左,默认), raggedright (居 右). pagestyles 是申明后面要使用 titlesec 宏包自定义页面样式(在下一节会讲).
+
+标题由标签+标题内容构成,其格式通常在 XETEX / LaTEX 文稿的导言区中设置.要设 置论文中的节标题格式,可用 titleformat 指令,用法如下:
+
+~~~~~~~~~~~
+\titleformat{command}[shape]{format}{label}{sep}{before}[after]
+~~~~~~~~~~~~
+
+其中各参数含义如下:
+
+ * command 是要重新定义的各种标题命令,比如 \section , \subsection ,还有更 多的,在后文中讲书籍排版时再谈;
+ * shape 是用来设定段落形状的,可选的参数有 hang , block , display 等,详 见 titlesec 文档,位于:
+$TEXLIVE/$VERSION/texmf-dist/doc/latex/titlesec
+ * format 用于定义标题外观,比如使标题居中,字体加粗等;
+ * label 用于定义定义标题的标签,就是标题内容前面的标号;
+ * sep 定义标题的标签与标题内容之间的间隔距离;
+ * before 用于在标题内容前再加些内容;
+ * after 用于在标题内容后再加些内容;
+
+本文排版所用节标题分为两级,其格式采用以下命令设置:
+
+~~~~~~~~~~~~
+\titleformat{\section}{\centering\Large\bfseries}{\S\,\thesection}{1em}{}
+\titleformat{\subsection}{\large\bfseries}{\S\,\thesubsection}{1em}{}
+~~~~~~~~~~~~~
+
+其 中, shape , before , after 参 数 都 被 省 略 掉 了. format 参 数 将 section 格 式设置为居中( `\centering` ),字号为 `\Large` ,字体被加粗显示 `\bfseries` ;在设 置 subsection 格式,未采用居中,而是采用默认的居左,另外将标题的字号也降了一 级( `\large` ). label 参数将标题的标签设置为以"§"为前缀 + 标题序号. sep 参数设 置标签与标题内容之间以一个字(1em)的宽度为间隔.
+
+### 页眉与页脚 ###
+这一节讲怎样使用 titlesec 宏包设置页眉,页脚.下面的命令在 XETEX / LaTEX 导言区 定义了一个新的页面样式,并使用该样式:
+
+~~~~~~~~~~~
+\newpagestyle{main}{
+\sethead{\small\S\,\thesection\quad\sectiontitle}{}{$\cdot$~\thepage~$\cdot$}
+\setfoot{}{}{}\headrule}
+\pagestyle{main}
+~~~~~~~~~~~
+
+其中 `\sethead` 命令设置页眉,用法为:
+
+~~~~~~~~~
+\sethead[偶数页左页眉][偶数页中页眉][偶数页右页眉] {奇数页左页眉}{奇数页中页眉}{奇数页右页眉}
+~~~~~~~~~
+
+单面打印模式只要给出奇数页的设置即可,双面模式则需要将左,右页眉做个调换.上 面给出的例子是单面模式的. `\setfoot` 指令用法与 `\sethead` 用法相似.
+上面的页眉页脚设置示例中,`\headrule` 指令可画页眉线,默认宽度是 0.4pt,如果对该 宽度不满意,可使用下面命令重新设置其宽度:
+
+~~~~~~~~~~
+\setheadrule{宽度值}
+~~~~~~~~~~
+
+上面的页眉设置示例的排版效果即本文档页眉效果.
+
+## 中文字体 ##
+首先,我用的是Linux环境并且选用的是**UTF-8**的编码,而不是GBK,否者在github上显示会有问题,不了解这方面的朋友自己找找资料吧,够讲个把小时的。
@lmmsoft
lmmsoft added a note

“否者”错了吧?应该是“后者”,或者“否则”?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+
+在产生PDF时,一般建议内嵌中文字体的,但是真正能用的中文字体实际很少,极大多数是有版权的:
+
+ * [文鼎](http://www.arphic.com.tw/)开放的四套字体(简报宋、细上海宋、简中楷、中楷),没有一点版权问题,是大部分的中文Linux的缺省安装。
+ * [文泉驿](http://wenq.org/)的几套字体(微米黑、正黑、点阵宋体)是开放但是GPL性质的,所以不是随便可以商用的。
+ * Adobe有两套开放字体(宋体、黑体)我认为是可以随便用的,忘了在哪里看到这个解释的了。
+
+可以看看[Ubuntu免费中文字体](http://wiki.ubuntu.org.cn/免费中文字体)的介绍有个认识。
+
+## 怎么选择对应字体 ##
+一般缺省中文正文字体是宋体、细明体,对应英文Serif类的英文字体:Georgia、Times New Roman等。
+
+标题和重要内容可以选楷体和黑体,对应英文Sans Serif类的英文字体:Arial、Tahoma、Verdana等
+
+技术文章中常见的代码典型的等宽体用黑体,对应英文Monospace类的英文字体:Courier New等
+
+所以对应的在[我的中文Latex配置](https://github.com/larrycai/sdcamp/blob/master/latex/config.yml)中可选的是:
+
+ * font:文鼎的简报宋、细上海宋,文泉驿的点阵宋体,Adobe的宋体
+ * bold: 文鼎的简中楷、中楷,文泉驿的微米黑、正黑,Adobe的黑体
+ * mono: 文泉驿的微米黑、正黑,Adobe的黑体
+
+## 如何安装字体 ##
+我用的试验环境是Ubuntu Oneiric (11.10),大部分可以直接从Ubuntu源中下载了。
+
+你可以用命令`fc-list :lang=zh-cn`查看安装好的中文字体,结果中前半部分就是字体名称(如`AR PL UMing CN`)。
+
+ user@puppet1:~$ fc-list :lang=zh-cn | grep CN
+ AR PL UMing CN:style=Light
+ AR PL UKai CN:style=Book
+
+文鼎开放的四套字体的Ubuntu包、字体名字和名称如下:
+
+ ttf-arphic-gbsn00lp "AR PL SungtiL GB" 文鼎PL简报宋
+ ttf-arphic-gkai00mp "AR PL KaitiM GB" 文鼎PL简中楷
+ ttf-arphic-ukai "AR PL UKai" 文鼎PL中楷
+ ttf-arphic-uming "AR PL UMing" 文鼎PL细上海宋
+
+文泉驿字体的Ubuntu包、字体名字和名称如下
+
+ ttf-wqy-microhei "WenQuanYi Micro Hei" 文泉驿的微米黑
+ ttf-wqy-zenhei "WenQuanYi Zen Hei" 文泉驿的正黑
+ xfonts-wqy "WenQuanYi Bitmap Song" 文泉驿的点阵宋体
+
+Adobe的中文字体有[官方下载](http://www.adobe.com/support/downloads/detail.jsp?ftpID=4421)
+
+ $ tar -jzxf FontPack910_chs_i486-linux.tar.bz2
+ $ tar -xvf CHSKIT/LANGCHS.TAR
+ $ mkdir ~/.fonts
+ $ cp Adobe/Reader9/Resource/CIDFont/*.otf ~/.fonts
+ $ fc-cache -f -v
+ $ fc-list :lang=zh | grep Adobe
+
+## 蛋疼的问题 ##
+
+只可惜现在正文在产生PDF时没有一种字体是有完美表现的。
+
+ 1. 文鼎贡献的字体中台湾字形的细上海宋的句号在中间,出来的效果不伦不类的。
+ 2. 文鼎贡献的字体中大陆字形的简中楷和简报宋,标点符号的位置是对的,但是当碰到条目(Item)的时候条目的点没能显示出来。
+ 3. Adobe的宋体,条目的时候显示一个田子框,很难看。
+ 4. 文泉驿的点阵宋体老是转化Latex时出错,搞不定。
+
+2、3 条目的问题,我hack成其他字符(*)显示就没问题了(如下),不知道缺省的圆点为啥显示不对。<http://wiki.ctex.org/index.php/LaTeX/%E5%88%97%E8%A1%A8>,现在就用文鼎的细上海宋了。
+
+~~~~~~~~~~~~~~ {.latex}
+ \begin{itemize}\setlength{\itemsep}{1pt}\setlength{\parskip}{0pt}\setlength{\parsep}{0pt}
+ \item[*]
+ % 原来是
+ % \item
+~~~~~~~~~~~~~~~~~~~~
+
+## 参考 ##
+ 1. <http://share.chinatex.org/>
+ 2. <http://latex.yo2.cn/articles/latex-introduction0.html>
+ 3. LATEX2e完全学习手册:<http://product.china-pub.com/54569>
+
+ [^41]: 感谢lyanry写的“XETEX / LaTEX 中文排版之胡言乱语“,浅显易懂。
+
+
+

1 comment on commit 53393df

@lmmsoft

“否者”错了吧?应该是“后者”,或者“否则”?

@larrycai
Owner

谢谢,改了。这一章还很乱,没整理呢。

Please sign in to comment.
Something went wrong with that request. Please try again.