先寫做,後排版

注意:閱讀本文以前請肯定已經至少讀過『睦鄰友好的 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 的編譯結果

若是你熟悉科技論文的格式,你會發現 simplicity.tex 中未出現論文的摘要。之因此如此,是由於摘要一般是在文章寫完後才寫的。

如今假設文章已經寫完了,那麼就在做者與引言之間插入摘要:

\author{...} % 做者信息
\abstract{...} % 摘要
\section{...} % 引言
% 引言內容

而後再從新編譯 simlicity.tex,context 命令便會抱怨 \abstract 未定義,那麼好吧,咱們再用 \def 定義一下它:

\def\abstract#1{#1}

以上過程所得的結果是 ConTeXt 默認設置的排版結果,很是的簡陋,可是那有什麼關係?咱們如今是在寫做,並不是排版。

重要的事重複三遍

寫做的過程不考慮排版,不考慮排版,不考慮排版。

甚至,咱們能夠爲所欲爲的定義一些只是原樣輸出文本的宏來知足文檔格式上的需求,例如上一節所定義的 \authorplacepublications\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 與 MarkdownreStructuredTeXt 這類專一於寫做內容而不關心排版的標記文本有些相似。所以我用 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] % 啓用超級連接

它們已經違反了寫做過程當中不排版的原則,可是我以爲調整一下排版結果中的段落與文本行的間距,改善排版結果的可閱讀性,這樣更有利於排查寫做中出現的邏輯或字句錯誤。

相關文章
相關標籤/搜索