注意:阅读本文以前请肯定已经至少读过『睦邻友好的 ConTeXt Standalone 』一文。html
先写做,后排版。换言之,内容为重,排版次之。这个道理无需多言,使用 ConTeXt 排版你的我的文档时,这一点尤其重要。由于你须要先用 ConTeXt 写文档,而后用 ConTeXt 排版文档。也就是说,你要将 ConTeXt 的全部宏分红两类,一类是用来写文档的,另外一类是用于文档排版的。segmentfault
以科技论文为例。要写一篇科技论文,考虑的是标题、做者信息、引言、正文、结论、参考文献以及论文摘要这几部份内容的肯定,这就是写做。这个过程若是用 ConTeXt 宏来表示,那就是:bash
\starttext \title{...} % 标题 \author{...} % 做者信息 \section{...} % 引言 % 引言内容 \section{...} % 正文第一节 % 正文第一节内容 ... ... ... % 段落 1 ... ... ... % 段落 2 ... ... ... \section{...} % 正文第二节 % 正文第二节内容 ... ... ... \section{...} % 结论 % 结论内容 \placepublications % 生成参考文献 \stoptext
对上述文档内容略作说明:markdown
%
是全部 TeX 的注释符,亦即 %
以后的文本会被 TeX 忽略,也意味着这些文本是无关紧要的。编辑器
\starttext
与 \stoptext
之间的文本,便是你要写做的内容,也是是 ConTeXt 要排版的内容。spa
\title{...}
表示文章的标题,将 ...
替换成标题文本便可。rest
\section{...}
是『章节』中的『节』的标题。节标题后面的内容就是这一节的内容,即『段落』。ConTeXt 用空行对文本进行分段。code
\placepublications
用于放置参考文献列表。htm
可将上述文档内容做为科技论文最基本的写做模板。咱们写论文的过程,就是为这个模板填充内容的过程。blog
如今能够将上述内容保存至一个文本文件,姑且称之为 simplicity.tex,而后尝试编译它:
$ . ~/context/tex/setuptex # 该命令仅在当前终端中执行一次便可 $ context simplicity
结果你会遭遇 \author
、\placepublications
等宏未定义的错误。没有关系,咱们能够先简单的定义它们,即在 \starttext
以前放置如下代码:
\def\author#1{#1} \def\placepublications{}
\def
是 TeX 提供的定义其余宏的宏。若是如今就想了解 \def
的一些细节,能够阅读『TeX 的宏 \ 第一集』。
而后便可编译经过。用 pdf 阅读器打开所生成的 simplicity.pdf,看到的应该相似下面图中的结果。请对照 simplicity.tex 的内容认真的在本身的大脑中创建 simplicity.tex 与 simplicity.pdf 之间的映射关系。
若是你熟悉科技论文的格式,你会发现 simplicity.tex 中未出现论文的摘要。之因此如此,是由于摘要一般是在文章写完后才写的。
如今假设文章已经写完了,那么就在做者与引言之间插入摘要:
\author{...} % 做者信息 \abstract{...} % 摘要 \section{...} % 引言 % 引言内容
而后再从新编译 simlicity.tex,context
命令便会抱怨 \abstract
未定义,那么好吧,咱们再用 \def
定义一下它:
\def\abstract#1{#1}
以上过程所得的结果是 ConTeXt 默认设置的排版结果,很是的简陋,可是那有什么关系?咱们如今是在写做,并不是排版。
写做的过程不考虑排版,不考虑排版,不考虑排版。
甚至,咱们能够为所欲为的定义一些只是原样输出文本的宏来知足文档格式上的需求,例如上一节所定义的 \author
,placepublications
与 \abstract
宏。
咱们能够一边在 simplicity.tex 中创造内容,一边用 context
生成 simplicity.pdf 来查看结果。这里顺便推荐一下 evince 阅读器,每当 context
更新了 pdf 文件,evince 会自动刷新本身所打开的 pdf。若是没有 evince,你应该找到相似它这样的软件。texworks 也不错,它不只具有可动态刷新的 pdf 查看功能,同时也提供了 .tex 文档的编辑器。我只是由于喜欢用 Emacs 进行文档编辑,因此未使用 texworks。
当你对 ConTeXt 中用于写做的宏足够熟悉以后,是不须要去查看 pdf 输出结果的。
之因此提倡写做的过程不考虑排版,是由于咱们有足够的自信可以在写做过程结束后老是可以完成符合既定要求的排版,由于任何形式的排版都应该为内容的良好呈现而服务。若是在写做过程当中为了迎合排版,这是对写做的一种扭曲。
只有秉持写做过程当中不考虑排版,才可以实现内容与样式的分离,才可以实现一分内容对应着多种样式的输出,就像 HTML + CSS 那样。
更况且 ConTeXt 的宏要比 HTML 标记简洁得多,仅从 ConTeXt 不须要一大堆 <p>...</p>
这一点就能够证实。虽然 ConTeXt 的宏名要比 HTML 标记名长得多,可是长的宏名具有自解释性并且它们并不是频繁使用,所以直接用 ConTeXt 写文档是彻底可行的。
除了上述提到的一些宏,其余在写做中频繁使用的宏,若逐一列举,味同嚼蜡,仍是直接以一个比较全面的实例来讲明为好。
在文章内容的写做方面,ConTeXt 与 Markdown、reStructuredTeXt 这类专一于写做内容而不关心排版的标记文本有些相似。所以我用 ConTeXt 写了与本文在结构上近乎至关的一份 .tex 文件,只要你理解 Markdown(segmentfault.com 的用户对此应该不陌生),那么结合本文的内容结构,这份 .tex 文档中的大部份内容应该不难理解,这份文档自己及其所生成的 pdf 文件可从个人百度网盘下载,地址: http://pan.baidu.com/s/1jG1ukS2
\usemodule[zhfonts] \setupwhitespace[big] % 段间距 \setupinterlinespace[line=1.5em] % 行间距 \setupinteraction[state=start] % 启用超级连接 \starttext \title{先写做,后排版} 先写做,后排版。换言之,内容为重,排版次之。这个道理无需多言,使用 \ConTeXt\ 排版你的我的文档时,这一点尤其重要。由于你须要先用 \ConTeXt\ 写文档,而后用 \ConTeXt\ 排版文档。也就是说,你要将 \ConTeXt\ 的全部宏分红两类,一类是用来写文档的,另外一类是用于文档排版的。 \section{写做} 以科技论文为例。要写一篇科技论文,考虑的是标题、做者信息、引言、正文、结论、参考文献以及论文摘要这几部份内容的肯定,这就是写做。这个过程若是用 \ConTeXt\ 宏来表示,那就是: \starttyping \starttext \title{...} % 标题 \author{...} % 做者信息 \section{...} % 引言 % 引言内容 \section{...} % 正文第一节 % 正文第一节内容 ... ... ... % 段落 1 ... ... ... % 段落 2 ... ... ... \section{...} % 正文第二节 % 正文第二节内容 ... ... ... \section{...} % 结论 % 结论内容 \placepublications % 生成参考文献 \stoptext \stoptyping 对上述文档内容略作说明: \startitemize[1] \item \type{%} 是全部 TeX 的注释符,亦即 \type{%} 以后的文本会被 TeX 忽略。 \item \type{\starttext} 与 \type{\stoptext} 之间的文本,便是你要写做的内容,也是是 \ConTeXt\ 要排版的内容。 \item \type{\title{...}} 表示文章的标题,将 \type{...} 替换成标题文本便可。 \item \type{\placepublications} 用于放置参考文献列表。 \stopitemize 可将上述文档内容做为科技论文最基本的写做模板。咱们写论文的过程,就是为这个模板填充内容的过程。 如今能够将上述内容保存至一个文本文件,姑且称之为 simplicity.tex,而后尝试编译它: \starttyping $ . ~/context/tex/setuptex # 该命令仅在当前终端中执行一次便可 $ context simplicity \stoptyping 结果你会遭遇 \type{\author}、\type{\placepublications} 等宏未定义的错误。没有关系,咱们能够先简单的定义它们,即在 \type{\starttext} 以前放置如下代码: \starttyping \def\author#1{#1} \def\placepublications{} \stoptyping \useURL[TeX-macro][http://garfileo.is-programmer.com/2010/5/21/macro-of-tex.18296.html][][\TeX 的宏 \type{\ } 第一集] \type{\def} 是 TeX 提供的定义其余宏的宏。若是如今就想了解 \type{\def} 的一些细节,能够阅读『\from[TeX-macro]』。 而后便可编译经过。用 pdf 阅读器打开所生成的 simplicity.pdf,看到的应该相似下面图中的结果。请对照 simplicity.tex 的内容认真的在本身的大脑中创建 simplicity.tex 与 simplicity.pdf 之间的映射关系。 \placefigure[][here]{simplicity.tex 的编译结果}{\framed{\externalfigure[simplicity.pdf][height=10cm]}} 若是你熟悉科技论文的格式,你会发现 simplicity.tex 中未出现论文的摘要。之因此如此,是由于摘要一般是在文章写完后才写的。 如今假设文章已经写完了,那么就在做者与引言之间插入摘要: \starttyping \author{...} % 做者信息 \abstract{...} % 摘要 \section{...} % 引言 % 引言内容 \stoptyping 而后再从新编译 simlicity.tex,\type{context} 命令便会抱怨 \type{\abstract} 未定义。那么,好吧,咱们再用 \type{\def} 定义一下它: \starttyping \def\author#1{#1} \stoptyping 以上过程所得的结果是 \ConTeXt\ 默认设置的排版结果,很是的简陋,可是那有什么关系?咱们如今是在写做,并不是排版。 \section{重要的事重复三遍} 写做的过程不考虑排版,不考虑排版,不考虑排版。 甚至,咱们能够为所欲为的定义一些只是原样输出文本的宏来知足文档格式上的需求,例如上一节所定义的 \type{\author},\type{placepublications} 与 \type{\abstract} 宏。 咱们能够一边在 simplicity.tex 中创造内容,一边用 \type{context} 生成 simplicity.pdf 来查看结果。这里顺便推荐一下 evince 阅读器,每当 \type{context} 更新了 pdf 文件,evince 会自动刷新本身所打开的 pdf。若是没有 evince,你应该找到相似它这样的软件。texworks 也不错,它不只具有可动态刷新的 pdf 查看功能,同时也提供了 .tex 文档的编辑器。我只是由于喜欢用 Emacs 进行文档编辑,因此未使用 texworks。 当你对 \ConTeXt\ 中用于写做的宏足够熟悉以后,是不须要去查看 pdf 输出结果的。 之因此提倡写做的过程不考虑排版,是由于咱们有足够的自信可以在写做过程结束后老是可以完成符合既定要求的排版,由于任何形式的排版都应该为内容的良好呈现而服务。在写做过程当中过于迎合排版,这是对写做的一种扭曲。 \section{内容与样式的分离} 只有秉持写做过程当中不考虑排版,才可以实现内容与样式的分离,才可以实现一分内容对应着多种样式的输出,就像 HTML + CSS 那样。 更况且 \ConTeXt\ 的宏要比 HTML 标记简洁得多,仅从 \ConTeXt\ 不须要一大堆 \type{<p>...</p>} 这一点就能够证实。虽然 \ConTeXt\ 的宏名要比 HTML 标记名长得多,可是长的宏名具有自解释性并且它们并不是频繁使用,所以直接用 \ConTeXt\ 写文档是彻底可行的。 \section{ConTeXt 中用于写做的宏} 除了上述提到的一些宏,在写做中频繁使用的宏都有……逐一列举,味同嚼蜡,仍是直接以一个比较全面的实例来讲明为好。 \useURL[example-01][http://pan.baidu.com/s/1c0FJADU] 我用 ConTeXt 写了与本文在结构上近乎至关的一份 .tex 文件并将其生成为 pdf 文件,它们可从个人百度网盘下载,地址:\from[example-01] 下载后,请与 [markdown 文本格式](http://segmentfault.com/markdown)进行一些对比,而后应该差很少可以明白 ConTeXt 中经常使用的写做宏的基本用法。 \stoptext
值得注意的是,虽然我强调要先写做,后排版,但上面的示例文件中的三行代码:
\setupwhitespace[big] % 段间距 \setupinterlinespace[line=1.5em] % 行间距 \setupinteraction[state=start] % 启用超级连接
它们已经违反了写做过程当中不排版的原则,可是我以为调整一下排版结果中的段落与文本行的间距,改善排版结果的可阅读性,这样更有利于排查写做中出现的逻辑或字句错误。