先写作,后排版

神秘代码
• 阅读 4591

注意:阅读本文之前请确定已经至少读过『睦邻友好的 ConTeXt Standalone 』一文。

先写作,后排版。换言之,内容为重,排版次之。这个道理无需多言,使用 ConTeXt 排版你的个人文档时,这一点尤为重要。因为你需要先用 ConTeXt 写文档,然后用 ConTeXt 排版文档。也就是说,你要将 ConTeXt 的所有宏分成两类,一类是用来写文档的,另一类是用于文档排版的。

写作

以科技论文为例。要写一篇科技论文,考虑的是标题、作者信息、引言、正文、结论、参考文献以及论文摘要这几部分内容的确定,这就是写作。这个过程如果用 ConTeXt 宏来表示,那就是:

\starttext

\title{...} % 标题
\author{...} % 作者信息

\section{...} % 引言
% 引言内容

\section{...} % 正文第一节
% 正文第一节内容
... ... ... % 段落 1

... ... ... % 段落 2

... ... ...

\section{...} % 正文第二节
% 正文第二节内容

... ... ...

\section{...} % 结论
% 结论内容

\placepublications % 生成参考文献

\stoptext

对上述文档内容略做说明:

  • % 是所有 TeX 的注释符,亦即 % 之后的文本会被 TeX 忽略,也意味着这些文本是可有可无的。

  • \starttext\stoptext 之间的文本,即是你要写作的内容,也是是 ConTeXt 要排版的内容。

  • \title{...} 表示文章的标题,将 ... 替换成标题文本即可。

  • \section{...} 是『章节』中的『节』的标题。节标题后面的内容就是这一节的内容,即『段落』。ConTeXt 用空行对文本进行分段。

  • \placepublications 用于放置参考文献列表。

可将上述文档内容作为科技论文最基本的写作模板。我们写论文的过程,就是为这个模板填充内容的过程。

现在可以将上述内容保存至一个文本文件,姑且称之为 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 默认设置的排版结果,非常的简陋,但是那有什么关系?我们现在是在写作,并非排版。

重要的事重复三遍

写作的过程不考虑排版,不考虑排版,不考虑排版。

甚至,我们可以随心所欲的定义一些只是原样输出文本的宏来满足文档格式上的需求,例如上一节所定义的 \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] % 启用超级链接

它们已经违反了写作过程中不排版的原则,但是我觉得调整一下排版结果中的段落与文本行的间距,改善排版结果的可阅读性,这样更有利于排查写作中出现的逻辑或字句错误。

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Markdown语法
Markdown基本语法\TOC\优点:1、因为是纯文本,所以只要支持Markdown的地方都能获得一样的编辑效果,可以让作者摆脱排版的困扰,专心写作。2、操作简单。比如:word编辑时标记个标题,先选中内容,再点击导航栏的标题按钮,选择几级标题。要三个步骤。而Markdown只需要在标题内容前加即可缺点:1、需要记一
Stella981 Stella981
3年前
FreeType字体知识
1.字形度量顾名思义,字形度量是对应每一个字形的特定距离,以此描述如何对文本排版。通常一个字形有两个度量集:用来排版水平文本排列的字形(拉丁文、西里尔文、阿拉伯文、希伯来文等等)和用来排版垂直文本排列的字形(中文、日文、韩文等等)。要注意的是只有很少的字体格式提供了垂直度量。你可以使用宏FT_HAS_VERTICAL测试
燕青 燕青
1年前
Mac写作软件:Scrivener for Mac中文激活版 支持M1
是一款强大的写作工具,它可以帮助作者完成从作品构思、搜集资料、组织结构、增删修改到排版输出的整个写作流程。无论是结构化的论文还是信马由缰的随笔,各种写作方式都可以在Scrivener中找到适合的工具和功能。Scrivener的主要特点包括可以标注多个文档、
绣鸾 绣鸾
1年前
Markdown文本编辑工具 Typora for Mac
是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。TyporaMac版除了支持常见的Markdown语法
绣鸾 绣鸾
1年前
文本写作软件Ulysses for Mac v32.2
是一款专为写作而设计的macOS应用程序,旨在让写作变得更加简单和高效。它具有以下优点:简洁而强大的编辑界面,可以让你专注于创作,而不是被繁琐的排版和格式所困扰。强大的组织和管理功能,可以让你轻松管理和组织你的文档和笔记,以及导出各种格式的文档。多平台同步
绣鸾 绣鸾
1年前
设计排版工具Affinity Publisher 2 for Mac
是一款非常专业的排版软件,可以用于创建各种印刷品,如杂志、书籍、海报、传单等。AffinityPublisher具有直观的界面和丰富的排版工具,可以满足各种类型的排版需求。AffinityPublisher支持多种文件格式,包括PDF、Eps、SVG、TI
子桓 子桓
1年前
苹果mac点排版软件:Affinity Publisher 中文 for mac
AffinityPublisher是一款专业级排版软件。它提供了丰富的排版和设计工具,适用于创建印刷品、杂志、书籍、宣传册、报告和其他各种出版物。以下是AffinityPublisher的主要特点和功能:强大的排版工具:AffinityPublisher提
流浪剑客 流浪剑客
1年前
Markdown文本编辑器:Typora for Mac中文版 支持M1
Typora是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。TyporaMac版除了支持常见的Mark
赵融 赵融
1年前
InDesign 2024 for Mac(ID 2024)v19.0中英文已发布,最新介绍
ID2024是一款功能强大的页面设计和排版软件,具有丰富的工具和功能,适用于各种出版需求。它提供了高级的排版和布局工具,支持快速创建和调整页面布局,以及精确的文字处理和段落样式控制。新版本还引入了字体管理的改进、变量字体的支持和云端文档的同步和共享功能。此
绣鸾 绣鸾
1年前
Ulysses 33 for Mac文本写作软件
是一款专为写作而设计的macOS应用程序,旨在让写作变得更加简单和高效。它具有以下优点:简洁而强大的编辑界面,可以让你专注于创作,而不是被繁琐的排版和格式所困扰。强大的组织和管理功能,可以让你轻松管理和组织你的文档和笔记,以及导出各种格式的文档。多平台同步
JYK1106 JYK1106
3年前
LaTeX学习系列——搭建文档框架
​在写任何一篇文章时,我们都需要先列出一个提纲,有了提纲,在写作过程中会更加得心应手。同理,排版一篇已经写好的文章也是需要提纲的。在使用LaTeX对文章进行排版的过程中,首先应该写出LaTeX文档的框架,进行必要的基本设置,再填入内容会更加便捷。今天我们以《杂谈勾股定理》举例,列出大致框架,手把手教你学会LaTeX。从上图可以看出,文章的整体框架已经出来了,