本文根据txt2tags(当前版本为2.5)的用户指南英文版翻译而来,读者可通过以下途径获得用户指南的英文原版:
本译文依照创作共用约定(署名-非商业性使用-相同方式共享)3.0发布。
本章为概述,介绍txt2tags程序的用途和特色。
txt2tags是一个文本格式化和转换工具,能够将带有特定标记的纯文本文件转换为支持的任意一种目标格式,包括:
你会发现txt2tags十分有用,如果你:
而最大的诱人之处在于:
源文件可读性好 | txt2tags的标记非常简单,使得源文件几乎是自然语言。 |
目标文件可读性好 | 与源文件一样,生成的目标文件带有缩进和较短的行长度,可读性好。 |
一致的标记 | txt2tags的标记是独特的,足以适应各种文档而不至于与文档内容产生混淆。 |
一致的规则 | 每种标记与其对应的规则是一一对应的,不存在“例外”或“特殊情形” |
结构简单 | 所有支持的格式都是简单的,不带有附加选项或者复杂的修饰。标记只是标记而已,没有任何选项。 |
易于学习 | 由于简单的标记和可读的源文件,txt2tags的学习曲线非常的“用户友好”。 |
漂亮的示例 | 无论用txt2tags编写简单还是复杂的文档,包含在软件包中的示例文件都给出了生动实用的例子。 |
有用的工具 | 包含于软件包中的语法规则文件帮助你写出没有语法错误的文档(适用于vim, emacs, nano和kate)。 |
三种用户接口 | 用Tk编写的图形接口,可供远程和内部网使用的网页接口,以及共高级用户和脚本使用的命令行接口。 |
脚本 | 有经验的用户能够通过完全的命令行模式进行自动任务,以及对转换后的文件进行后编辑。 |
下载、运行和跨平台 | txt2tags只是一个简单的Python 脚本,毋需编译或下载额外的模块,因此在各种*NIX、Linux、Windows和Macintosh主机上均能完美运行。 |
时常更新 | 活跃的邮件列表有用户提供修正和改进。作者本人在工作和业余也在使用txt2tags,因此开发不会无故终止。 |
当然不需要! |
---|
txt2tags在GPL许可证下发布,并且完全免费。
以下列出了txt2tags支持的文档结构。
startx -- -bpp 8
),幻灯片依然美观。
你需要做的只是:转换,然后使用。毋需任何修复或是其他额外的工作。
{{{'''''adding braces and quotes'''''}}}
。Txt2tags为你带来简单的标记和统一的解决方案:一个源文件,多种产出物。
结构 | html | xhtml | sgml | tex | lout | man | mgp | wiki | gwiki | doku | moin | pm6 | txt |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
头部 | Y | Y | Y | Y | Y | Y | Y | - | - | - | - | N | Y |
章节标题 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
段落 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
粗体字 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | - |
斜体字 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | - |
下划线字体 | Y | Y | - | Y | Y | - | Y | Y | - | Y | Y | Y | - |
删除线字体 | Y | Y | N | Y | - | - | - | Y | Y | Y | Y | N | - |
等宽字体 | Y | Y | Y | Y | Y | - | Y | Y | Y | Y | Y | Y | - |
未格式化行 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | - |
未格式化区域 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | - |
引用区域 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
超链接 | Y | Y | Y | - | - | - | - | Y | Y | Y | Y | - | - |
e-mail链接 | Y | Y | Y | - | - | - | - | Y | Y | Y | Y | - | - |
本机链接 | Y | Y | Y | N | N | - | - | N | N | Y | Y | - | - |
命名链接 | Y | Y | Y | - | - | - | - | Y | Y | Y | Y | - | - |
列表 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
计数列表 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
定义列表 | Y | Y | Y | Y | Y | Y | N | Y | - | - | Y | N | Y |
水平线 | Y | Y | - | Y | Y | - | Y | Y | - | Y | Y | N | Y |
图片 | Y | Y | Y | Y | Y | - | Y | Y | Y | Y | Y | N | - |
表格 | Y | Y | Y | Y | N | Y | N | Y | Y | Y | Y | N | N |
附加结构 | html | xhtml | sgml | tex | lout | man | mgp | wiki | gwiki | doku | moin | pm6 | txt |
图片对齐 | Y | Y | N | N | Y | - | Y | Y | - | Y | N | N | - |
单元格对齐 | Y | Y | Y | Y | N | Y | N | N | - | - | Y | N | N |
跨列单元格 | Y | Y | N | N | N | N | N | N | - | - | N | N | N |
图例 | |
---|---|
Y | 支持 |
N | 不支持(后续版本可能会支持) |
- | 不支持(在该目标格式中不存在) |
不同用户的需求和使用环境不同,txt2tags相应的也具有灵活的执行方式。
程序有三种用户接口,每一种各有其目标和特性:
自1.0版本开始,txt2tags就有一个能工作于Linux、Windows、Mac以及其他操作系统之上的图形用户接口。
程序能自动检测你的系统能否显示图形,如果可以,则不带任何参数的命令调用时运行图形接口。你也可以通过命令行参数 --gui
强制运行图形接口。当某些资源缺失时,程序给出错误信息。
提示:Tkinter是必须的。因为Python的标准发布总是包含它,实际上 你的系统中应该已经有了。
图形界面的使用相当的简洁和直观:
~/.txt2tagsrc
文件的 %!guicolors
设定来更改。比如:
% set my own colors for the graphical interface (bg1, fg1, bg2, fg2) %!guicolors: blue white brown yellow
基于Web的界面可以通过互联网地址http://txt2tags.org/online.php来访问,你可以在下载之前先试用txt2tags。
Web接口也可以部署于本地局域网(intranet)内,免去在每台机器上安装txt2tags的麻烦。
对于有经验的命令行用户来说,--help
选项提供的帮助信息应该足够了:
Usage: txt2tags [OPTIONS] [infile.t2t ...] -t, --target=TYPE set target document type. currently supported: html, xhtml, sgml, tex, lout, man, mgp, wiki, gwiki, doku, moin, pm6, txt -i, --infile=FILE set FILE as the input file name ('-' for STDIN) -o, --outfile=FILE set FILE as the output file name ('-' for STDOUT) -n, --enum-title enumerate all title lines as 1, 1.1, 1.1.1, etc -H, --no-headers suppress header, title and footer contents --headers show header, title and footer contents (default ON) --encoding set target file encoding (utf-8, iso-8859-1, etc) --style=FILE use FILE as the document style (like HTML CSS) --css-sugar insert CSS-friendly tags for HTML and XHTML targets --css-inside insert CSS file contents inside HTML/XHTML headers --mask-email hide email from spam robots. x@y.z turns <x (a) y z> --toc add TOC (Table of Contents) to target document --toc-only print document TOC and exit --toc-level=N set maximum TOC level (depth) to N --rc read user config file ~/.txt2tagsrc (default ON) --gui invoke Graphical Tk Interface -q, --quiet quiet mode, suppress all output (except errors) -v, --verbose print informative messages during conversion -h, --help print this help information and exit -V, --version print program version and exit --dump-config print all the config found and exit Turn OFF options: --no-outfile, --no-infile, --no-style, --no-encoding, --no-headers --no-toc, --no-toc-only, --no-mask-email, --no-enum-title, --no-rc --no-css-sugar, --no-css-inside, --no-quiet Example: txt2tags -t html --toc myfile.t2t By default, converted output is saved to 'infile.<target>'. Use --outfile to force an output file name. If input file is '-', reads from STDIN. If output file is '-', dumps output to STDOUT.
假设你已经编写好一个正确标记的文件 file.t2t
,现在我们来尝试一些转换。
转换为HTML | $ txt2tags -t html file.t2t |
转换为HTML,使用输出重定向 | $ txt2tags -t html -o - file.t2t > file.html |
. | |
包含目录表 | $ txt2tags -t html --toc file.t2t |
带数字编号的目录表 | $ txt2tags -t html --toc --enum-title file.t2t |
. | |
内容概览 | $ txt2tags --toc-only file.t2t |
编号的概览 | $ txt2tags --toc-only --enum-title file.t2t |
. | |
从标准输入读取一行 | $ echo -e "\n**bold**" | txt2tags -t html --no-headers - |
Email地址识别测试 | $ echo -e "\njohn.wayne@farwest.com" | txt2tags -t txt --mask-email --no-headers - |
转换后编辑 | $ txt2tags -t html -o- file.t2t | sed "s/<BODY .*/<BODY BGCOLOR=green>/" > file.html |
提示:从1.6版本起,前处理和后处理可以通过%!preproc
和%!postproc
宏来完成。
下载然后运行——一切就是这么简单。
首先你必须下载安装Python解释器,如果你的系统已经安装过Python,请跳过本节。
Python是一种极好的编程语言,能够跨平台的在Windows、Linux、UNIX、Macintosh以及其他的操作系统上运行。你可以从Python主页找到安装文件以及安装指南。Txt2tags运行要求Python 2.0以后的版本。
如果你不确定是否已经安装过Python,请打开一个控制台(tty、xterm、MSDOS),输入命令 python
,如果Python并未安装,系统会给出错误信息。
Txt2tags的项目主页是http://txt2tags.org。全部程序文件打包成一个tarball压缩文件(.tgz 文件),你可以使用大多数的压缩工具来提取(包括WinZip)。请下载最新的版本,早期版本仅仅作为历史存档之用。
事实上,txt2tags只是一个单文件的Python脚本,毋需安装。
运行程序需要的唯一一个文件是脚本 txt2tags
,压缩包内的其他文件是软件的文档、示例以及一些工具。
最低级的使用txt2tags的方法是直接通过Python来调用:
prompt$ python txt2tags
如果想将 txt2tags 作为一个能够直接运行的程序“安装”到系统,请将 txt2tags 脚本复制(或者创建一个链接)到系统 PATH 变量定义的目录,并且确认系统能够运行它。
chmod +x txt2tags
),然后复制到 $PATH 变量定义的目录下(比如:cp txt2tags /usr/local/bin
)。
ren txt2tags txt2tags.py
),然后复制到系统 PATH 环境变量定义的路径下(比如:copy txt2tags.py C:\WINNT
)
如果想要使用图形用户接口,你可以创建一个桌面启动器(快捷方式)。
对于Windows用户,txt2tags还有两个打包好的安装程序,你只需点击鼠标即可完成安装:
你可以访问 Txt2tags-Win 主页下载安装包:http://txt2tags-win.sf.net/
Txt2tags提供适合以下编辑器使用的语法高亮文件:
语法高亮文件包含全部txt2tags标记和规则,以帮助用户编写出无误的文档——正确书写的标记将以彩色显示。
用Vim打开示例文件 |
语法文件对于不同的编辑器有不同的安装过程,请参考语法文件的头部说明和编辑器的文档。
你需要三件工具来完成你的第一次转换尝试:txt2tags,一个文本编辑器和一个网络浏览器。
txt2tags
”命令,程序会返回一个“缺少输入文件(Missing input file)”的信息。如果不能正确运行,尝试使用“python /path/to/txt2tags
”,甚至“/path/to/python /path/to/txt2tags
”以防止Python不在环境变量定义的路径中。
如果一切正常,现在你可以看到一个包含三行内容的文档:
我的第一个文档 txt2tags测试 星期日,2009
这只是一般文档的一部分,但是我们已经可以用它来尝试一下转换工作了。
将文档以文件名 test.txt
保存,记得要记住保存的路径,因为一会儿你要用到它。
如果你使用命令行,请跳过本节,直接阅读下一节。
如果你使用图形界面,请跟着我做:
test.txt
文件。
这时会弹出一个对话框,告诉你文件已经成功的转换了。生成的HTML文件与源文件在同一个文件夹下,以“html”为扩展名。
如果你使用图形界面,请跳过本节直接阅读下一节。
如果你使用命令行方式,请切换到源文件所在的目录,执行:
txt2tags --target html test.txt
请注意:在命令的各部分中间以空格分隔,但是在选项字符串“--target
”内部不能有空格,这个选项后面紧跟着字符串“html
”,告诉程序你想要的目标文件格式。最后一部分是源文件的文件名。
如果转换正常完成,结果会存储到文件 test.html
中,同时给出“txt2tags wrote test.html”的信息。如果不是这样,程序会报错,提示你可能出错了,请仔细检查一下。
一个示例:
prompt$ txt2tags --target html test.txt txt2tags wrote test.html prompt$
用浏览器打开文件 test.html
以检查是否正常。
看见结果了吗!你只是简单的输入了三行文字,txt2tags则为你完成了所有设置HTML文件头部信息的工作:对齐方式、大小、间隔以及外观。文档的主标题同时也出现在了浏览器的标题栏中。
你只需输入文本,txt2tags帮你搞定一切 ;) |
---|
提示:txt2tags生成的HTML页还能使用外部CSS,以实现对页面外观100%的定制。
现在返回文本编辑器进行下一步:撰写文档的内容。你可以像平日里撰写电子邮件一样的输入文字,毋需特别的“标记”,txt2tags会自动识别出段落和列表。
然后,再一次:保存、转换再查看结果。这就是txt2tags文档的编写流程。你可以把精力放在内容上,更快的完成文件的编写——毋需点鼠标,毋需菜单,没有窗口,没有什么来分散你的注意力。
假设文件 test.txt
中写上了如下的内容,完全的纯文本,将它们跟生成的HTML文件做一个对比:
我的第一个文档 txt2tags测试 星期日,2009 现在我们来试一试txt2tags好了。我也不晓得该写点啥…… 唔……好吧,列一下我马上该去做的事情: - 洗个澡 - 吃块批萨 - 去睡觉
你毋需任何HTML语言的准备知识就能够编写出完整的主页,不必插入任何标记。进一步,同一个源文件还可以转换为其他任何txt2tags所支持的格式。
除了纯文本之外,txt2tags有一些非常简单的标记来实现其他的格式和文档结构,比如粗体、斜体、标题、图片、表格,等等。举个简单的例子,**产生粗体**
,== 得到标题 ==
。详情请参阅标记示例(Txt2tags Markup Demo)。
Txt2tags的标记文本可以分为三个部分,每个部分各自的规则,实现不同的功能,包括:
前两个区域是可选的,只有 主体域 是必须的。
各个区域之间的分隔方式比较特别,下一章会详细描述,现在我们给出一个直观的图形化的描述:
____________ | | | HEADERS | 1. First, the Headers | | | CONFIG | 2. Then the Settings | | | BODY | 3. And finally the Document Body, | | | ... | which goes until the end | ... | |____________|
简单的说,各个部分是这样定义的:
头部域 | 文件内容的前三行;或者第一行是空白行,表示“没有头部”。 |
设置域 | 紧接着头部(第四行或者第二行)开始,结束于主体域的开始。 |
主体域 | 从头部区域之后的第一个有效的行(非注释或设置)开始。 |
My nice doc Title Mr. John Doe Last Updated: %%mtime(%c) %! Target : html %! Style : fancy.css %! Encoding: iso-8859-1 %! Options : --toc --enum-title Hi! This is my test document. Its content will end here.
位置:
头部是唯一固定位置和行数的区域,总是出现在源文件的头三行。各行的内容可以随意,并没有特别的要求。不过,对于大多数的文档,推荐以下的内容作为头部:
%%date
)
请记住:源文件的头三行将会是目标文件的头三行,在目标文件中会以高的对比与文档内容相区分(比如:大号字体,粗体)。如果允许分页,头部将会单独的在第一页居中显示。
有些时候作者会希望少于三行的头部,仅仅给出文档标题和(或)日期信息,这时只需将第二行和(或)第三行留为空行,这部份就不会在目标文件中显示。但是,请切记:即使是留为空白,这些行仍然是头部的一部分,主体域总是在这三行之后开始。
只有标题(第一行)是必须的,但是你也可以把它留白,这意味着文档没有头部,而主体域就紧接着从第二行开始。如果你打算在完成转换之后再来定制头部信息,那么没有头部的选择是很有用的。命令行选项 --no-headers
通常用来完成这一操作。
简而言之:“头部只是位置,而非内容”
源文件的第一行会出现在目标文件的第一行,二三行同样。
位置:
设置域是可选的。普通用户甚至可以编写出许多txt2tags文档,却不知道这个区域的存在,但是有经验的用户往往受益于它提供的有效的控制功能。设置域用来记录具体文档的设置,这样就省略了转换时繁杂的命令行选项。比如说,你可以设定好缺省的目标文件类型和字符编码。在“设定”一节中对此有详细的叙述。
位置:
除了头部和设置域以外的所有内容都是主体域。主体域包含来了文件的内容以及txt2tags支持的所有格式和文档结构的信息。在主体域内你也可以放置注释,作为 TODOs 和自提示。
命令行选项 --no-headers
会忽略头部,只转换主体域的内容。这是很有用的:你可以用单独的文件来定义头部,然后与转换后的主体域连接起来。
设定(Settings)是特殊的配置选项,位于文档的设置域内,用以控制转换的过程。设定的语法如:
$! 关键词 : 设定值
以下是有效的关键词列表:
关键词 | 描述 |
---|---|
target | 设定缺省的目标文件格式。 |
options | 设定缺省的转换选项,格式与命令行选项相同。 |
style | 设定文档样式。主要用作为HTML/XHTML文档定义外联的CSS样式表,以及为LaTeX文档加载宏包。 |
encoding | 设定字符编码。当文档包含国际化字符和非ASCII字符时需要指定编码。 |
preproc | 输入文件处理。设定应用于源文件的主体域中的“查找/替换”规则。 |
postproc | 输出文件处理。设定应用与输出文件中的“查找/替换”规则。 |
示例:
%! Target : html %! Options : --toc --toc-level 3 %! Style : fancy.css %! Encoding: iso-8859-1 %! PreProc : "AMJ" "Aurelio Marinho Jargas" %! PostProc: '<BODY.*?>' '<BODY bgcolor="yellow">'
改变txt2tags默认行为最快捷的方式是使用命令行选项。顾名思义,这些选项只能应用于命令行方式,不适用于GUI和Web界面。
与其他工具一样,程序接受一串预定义的选项,每个选项都是由一个单连字符引导的字母,或者两个连续的连字符引导的一个或多个单词,比如 -t
和 --target
。“target”选项是唯一的一个必须的选项,其他的都是可省略的选项。
常用的选项包括:--outfile
,指定输出文件名;--toc
,自动生成目录表;--encoding
,设定文档的字符编码。大多数的选项可以通过前缀一个“no-
”来关闭,比如:--no-encoding
和 --no-toc
。
使用 %!options
的格式,你可以在源文件的设置域设定需要的选项,这样在命令行中就可以省略掉这些选项了。比如:%!options: --toc -o mydoc.html
。目标文件格式的指定是个例外,它有自己的格式:%!target: html
。
使用 --help
选项能获得完整的选项列表。
通用的设定存储于用户配置文件(又称为RC文件)中。对于在每一个源文件中反复使用的设定,你可以把它们写到RC文件中,以便于所有的源文件使用。这个文件的缺省位置取决于你使用的操作系统,你也可以通过定义环境变量来指定其位置。
RC 文件的位置 | |
---|---|
Windows | %HOMEPATH%\_t2trc |
Linux and other | $HOME/.txt2tagsrc |
User defined | T2TCONFIG 环境变量 |
设定的格式与源文件设置域中使用的选项格式完全相同。以下是包含在程序包的 doc/txt2tagsrc
的示例文件:
% my configs %%% Always use CSS-friendly tags in HTML %!options(html): --css-sugar %%% Change the default TOC depth for all targets %!options: --toc-level 4 %%% Set the default encoding for all documents %!options: --encoding iso-8859-1
除去空白行、注释行和有效配置行之外的任何一个多余的行,都会使得txt2tags在运行时产生错误,因此编辑这个文件时请尽量小心。
在执行转换时,程序自动将RC文件的内容应用于源文件,如果你想要关闭这一行为,则可使用命令行选项 --no-rc
。
有三种方式告诉txt2tags需要使用的选项和设定,其读取和应用的顺序是:
程序首先读取RC文件的内容(如果存在的话),并将相应的设置应用于当前源文件。然后它检查源文件的设置域的设定,如果找到,应用之并且覆盖掉RC文件的设定以壁面冲突。最后是命令行选项,它的效力比前两者都高。
这即是说,如果文档的字符编码同时用三种方式来设定,最终被应用的是命令行选项的设定。
include
命令用于将外部文件的内容包含进源文件中。它不是一个配置选项而是一个命令,对于主体域区域来说,则是一个有效的行。
include
命令可用来将大型的文档分割为较小的片段(比如整本书中的章节),或者是将外部文件的全部内容包含进源文件中。比如:
My first book Dr. John Doe 1st Edition %!include: intro.t2t %!include: chapter1.t2t %!include: chapter2.t2t ... %!include: chapter9.t2t %!include: ending.t2t
文件名接在字符串 %!include
后面。支持可选的“target”选项,因此下面的格式也是合法的:
%!include(html): file.t2t
注意:include 命令将被包含文件的主体域区域读入源文件中,而头部和设置域则被忽略。所以,你可以单独转换这个文件,或者将它包含进主文档中一同转换。
此外,还有另外三种形式的包含:
完全引用(Verbatim)包含会保留读入文件原始的空格和格式,就像是txt2tags文件的完全引用(VERB)域一样。要实现这种类型的包含,请将文件名置于反引号中:
%!include: ``/etc/fstab``
原文(Raw)包含会照原样包含读入文件,不会寻找和解析其中的任何标记,就像之余原文(RAW)域中一样。要实现这种类型的包含,请将文件名置于双引号中:
%!include: ""nice_text.txt""
带标记(Tagged)包含会将读入文件内容直接传递给目标文件,txt2tags不会进行任何解析和控制。这种方式适用于在文档中包含额外的带标记的内容,对于缺省的头部或脚注信息以及txt2tags不支持的复杂标记十分有用:
%!include: ''footer.html''
注意:请将文件名置于两个单引号中间。由于插入的内容是已经格式化的,你必须确认目标文件格式以防止出错。
includeconf
命令用于将外部配置文件读入当前文件中。这个命令仅在源文件的设置域内出现才是合法而有效的。
当多个文件共享同样的配置时,你可以将这些配置集中放置,然后用这个指令来读入。请在每个需要读入外部集中配置的文件中使用 includeconf
命令。比如:
My First Document John Doe July, 2004 %!includeconf: config.t2t Hi, this is my first document.
外部配置文件使用的格式与RC文件相同。
txt2tags的全部标记概览:
基本 | 美化 | ||
---|---|---|---|
头部 | First 3 lines | 粗体 | **words** |
标题 | = words = | 斜体 | //words// |
带编号的标题 | + words + | 下划线 | __words__ |
段落 | words | 删除线 | --words-- |
链接 | [label url] | 等宽 | ``words`` |
图片 | [filename.jpg] | 原始文字 | ""words"" |
其他 | |||
引用 | <TAB>words | 分隔线 | |
列表 | - words | 粗分隔线 | ============... |
编号列表 | + words | 表格 | | cell1 | cell2 | cell3... |
定义列表 | : words | 锚点(标签) | = title =[anchor] |
注释行 | % comments | 注释域 | %%%\n comments \n%%% |
完全引用行 | ``` word | 完全引用域 | ```\n lines \n``` |
原文行 | """ words | 原文域 | """\n lines \n""" |
通用规则:
%%mtime
宏)
=像这样=
=title=, ==subtitle==, ===subsubtitle===, ...
=====像这样=====
=像这样===
= 像 这 样 =
=像这样=[anchor]
。可以创建一个到此锚点的链接,形如 [本地链接 #anchor]
%像这样
**像这样**
//像这样//
__像这样__
--像这样--
** 像这样 ** 是非法的
**%%date**
**__like__ //this//**
``像这样``
`` 像这样 `` 是非法的
www.likethis.com
[click here www.url.com]
[[image.jpg] www.url.com]
[see source %%infile]
[mirror of %%outfile www.url.com]
[likethis.jpg]
[likethis!~1.jpg]
[report-%%date(%Y-%m-%d).png]
[like this.jpg]
[ likethis.jpg ]
[LEFT.jpg]
左对齐左对齐左对齐
[CENTER.jpg]
居中居中居中
[RIGHT.jpg]
| 包含 | 5列 | 的| 表格 | 行 |
""like this""
""" like this
宏是一些特殊的关键词,在转换的时候进行展开和替换。宏可以用来插入动态的信息,比如源文件的编辑日期或其他信息。
宏的格式为:双百分号%%引导,后面紧跟着宏名,如:%%date
。某些宏可以后接一对圆括号,里面是可选的格式选项字符串,诸如:%%date(%Y-%m-%d)
,格式选项字符串由百分号%后接一个字符构成,如果未给出格式选项,则使用缺省的格式。
宏名 | 展开为 | 默认格式 |
---|---|---|
%%date |
当前日期 | %Y%m%d |
%%mtime |
源文件修改时间 | %Y%m%d |
%%infile |
源文件路径 | %f |
%%outfile |
输出文件路径 | %f |
%%toc |
展开为目录表 | - |
一般规则:
%%date
、%%DaTe
和 %%DATE
完全等效
%%toc
例外,它只能放在主体域区域。
%%toc
除外,它必须独占一行)
%%toc
除外)
一个完整的例子(粗体部分由宏展开得到):
本文是《Txt2tags用户指南》,由源文件 txt2tags-userguide-zh.t2t 通过Txt2tags转换得到,输出文件名 html。转换完成于 2009-03-24 13:07:11,而最后一次修改则是在 2009-03-24 13:06:52。源文件和目标文件均位于目录 t2t-userguide-cn 下。
(译者按:宏%%infile
和%%outfile
再Windows下无法正常展开。)
宏 %%date
将被替换为当前的日期和时间,可以用于在文档的头部或尾部注明生成的时间。如果要得到源文件最近一次编辑的时间,请参见 %mtime
宏一节。
宏展开时可以有若干不同的显示格式,完整的列表请参看 Python主页,以下是其中最常用的几种:
格式 | 描述 |
---|---|
%a |
星期名的缩写 |
%A |
星期名的全称 |
%b |
月份名的缩写 |
%B |
月份名的全程 |
%c |
日期和时间 |
%d |
一个月中的第几天(01-31的十进制数) |
%H |
24小时制的小时数(00-23的十进制数) |
%I |
12小时制的小时数(01-12的十进制数) |
%m |
一年中的第几个月(01-12的十进制数) |
%M |
分钟数(01-59的十进制数) |
%p |
本地格式的 上午 或者 下午 |
%S |
秒数(01-59的十进制数) |
%x |
本地的日期代称(原文:Locale's appropriate date representation) |
%X |
本地的时间代称 |
%y |
两位数的年份表示(00-99的十进制数) |
%Y |
完整的年份表示 |
%% |
百分号“%” |
示例:
宏 | --> | 对 2009, Mar 24 at 13:07 的展开效果 |
---|---|---|
%%date(Converted on: %c) | --> | Converted on: Tue Mar 24 13:07:11 2009 |
%%date(%Y-%m-%d) | --> | 2009-03-24 |
%%date(%I:%M %p) | --> | 01:07 PM |
%%date(Today is %A, on %B.) | --> | Today is Tuesday, on March. |
宏 %%mtime
将被展开为源文件最近一次修改的时间。它可算作是宏%%date的“姊妹篇”,其格式指令与之完全相同。
举一个例子,本文的源文件最近一次修改是在 Tue Mar 24 13:06:52 2009 ,这一日期由%%mtime(%c)
展开而来。
宏%%infile
展开为源文件在系统中的路径信息,可用于生成html中“查看本页面源文件”的链接。
该宏支持的格式指令如下:
指令 | 描述 | 本文源文件的宏展开输出 |
---|---|---|
%f |
文件名 | txt2tags-userguide-zh.t2t |
%F |
文件名(不含扩展名) | txt2tags-userguide-zh |
%e |
文件扩展名 | t2t |
%p |
文件绝对路径 | /home/rookie/tmp/editing/t2t-userguide-cn/txt2tags-userguide-zh.t2t |
%d |
文件所在目录 | /home/rookie/tmp/editing/t2t-userguide-cn |
%D |
文件父目录 | t2t-userguide-cn |
%% |
百分号 | % |
示例:
源代码 | --> | 展开结果 |
---|---|---|
This Guide parent dir is %%infile(%D). | --> | This Guide parent dir is t2t-userguide-cn. |
I do use the %%infile(%e) file extension. | --> | I do use the t2t file extension. |
[See the source %%infile] | --> | See the source |
Converted to XHTML, I'll be %%infile(%F).xhtml | --> | Converted to XHTML, I'll be txt2tags-userguide-zh.xhtml |
注:若源文件为标准输入STDIN,则宏展开为“-”。
宏%%outfile
将展开为目标文件的路径,可用于将文件名包含于文档的头部和主体内。它可算作是宏%%infile的“姊妹篇”,格式指令也完全相同。
示例:
源代码 | --> | 展开结果 |
---|---|---|
You are reading the %%outfile file. | --> | You are reading the txt2tags-userguide-zh.html file. |
txt2tags -t %%outfile(%e) -i %%infile -o %%outfile | --> | txt2tags -t html -i txt2tags-userguide-zh.t2t -o txt2tags-userguide-zh.html |
注:若输出为标准输出STDOUT,则宏展开为“-”。
宏%%toc
将展开为目录表。你可以把它放在文档主体域内的任何地方,甚至不止使用一次,比如你可以把它放在文档的末尾。本指南就是使用这个宏来放置了目录表。
与其他的宏不同,%%toc
没有格式字串,而使用规则也有不同:
--toc
配合使用,否则将被忽略
%%toc
,缺省的目录表位置和格式将被覆盖
设定项位于文档的设置域内,在转换执行时生效。设定项均为可选的,普通用户完全可以不使用它们而完成所有工作;然而,一旦你学会使用设定项,我打赌你一定会上瘾,因为它们实在太好用了!
设定行是特殊的注释行——由一个“!”引导,以此区别于普通的注释行。设定项的语法很简单,由关键词和值构成,二者由一个冒号(“:”)分隔。
%! keyword : value |
---|
语法细节:
规则:
用来定义缺省的目标文件格式,如:
%!target: html
此时用户只需调用命令:
$ txt2tags file.t2t
即可将文档转换为预设的目标格式。
本设定不支持指定可选的特定目标格式(原文:optional target specification),比如:%!target(tex): html
是无效的。
每次都输入冗长的命令行选项既累人又容易出错,使用Options设定项,用户可将转换选项与源文件放在一起,这同时也利于确保文档总能以相同的选项和相同的方式转换。
书写这些选项时请确保不要有语法错误,就像使用命令行方式一样。当然,对程序“txt2tags”的调用、目标格式的指定和源文件名就不必写进来了。
比如,假设你在命令行进行如下的转换:
$ txt2tags -t html --toc --toc-level 2 --enum-title file.t2t
把这些选项写入源文件:
%!target: html %!options(html): --toc --toc-level 2 --enum-title
现在你只需简单的使用命令“``txt2tags file.t2t”即可达到同样的目的,这样也便于你在编辑器中执行转换。比如,在Vi里面可以这样调用:
:!txt2tags %
Encoding选项为非英语用户所需,因为他们需要使用本地语言的某些特殊字符以及细节,因此目标文件的字符集需要自行指定(如果允许的话)。
有效的Encoding值与HTML所使用的字符集名称相同,比如:iso-8859-1、koi8-r等。如果你对此不确定,可以参见完整的字符集列表。
LaTeX使用的是字符集的别名,这对于用户来说并不是问题,因为txt2tags会替你完成名称的转换,比如:
txt2tags/HTML | > | LaTeX |
---|---|---|
windows-1250 | >>> | cp1250 |
windows-1252 | >>> | cp1252 |
ibm850 | >>> | cp850 |
ibm852 | >>> | cp852 |
iso-8859-1 | >>> | latin1 |
iso-8859-2 | >>> | latin2 |
koi8-r | >>> | koi8-r |
就算设定的值txt2tags无法识别也可以通过,反正由用户自行定制。
PreProc选项在源文件读入后还没解析前,进行“查找和替换”的工作。
可以用来定义一些常用词的缩写,如:
%!preproc JJS "John J. Smith" %!preproc RELEASE_DATE "2003-05-01" %!preproc BULLET "[images/tiny/bullet_blue.png]"
源文档中的一行:
Hi, I'm JJS. Today is RELEASE_DATE.
txt2tags在进行转换时会将其视为:
Hi, I'm John J. Smith. Today is 2003-05-01.
这相当于对源文件调用外部Sed/Perl进行过滤,然后传给txt2tags:
$ cat file.t2t | preproc-script.sh | txt2tags -
txt2tags在PreProc处理结束后开始对源文件进行解析。
注:预处理仅仅对主体域进行,不会包含头部域和设置域。
PostProc选项在txt2tags进行解析和处理结束后,对于转换后的内容进行“查找和替换”的工作。
可以用来对生成的文档进行进一步加工和微调,比如修改标记、添加额外的文本和标记,等等。比如:
%!postproc(html): '<BODY.*?>' '<BODY BGCOLOR="green">' %!postproc(tex) : "\\newpage" ""
作用是讲HTML文件的背景颜色改为绿色,以及移除LaTeX文件里的分页符。
这相当于对转换后的内容调用外部Sed/Perl进行过滤,再生成目标文件:
$ txt2tags -t html -o- file.t2t | postproc-script.sh > file.html
在引入这一特性前,我们往往得使用一些小脚本来“调整”txt2tags处理的结果,这些脚本实际上多是大量的sed(或类似工具)替换命令。现在,这些繁琐的替换字符串可以放在文件中,并使用Python强大的正则表达式机制来进行匹配和处理。
\usepackage
加载宏包。
--style
。
--style
优先级高于设定项 %!style
。
除了%!target
之外的所有设定项均可作用于某一特定的目标格式,语法如:%!key(target): value
。这使得用户可以针对不同的目标格式进行不同的设置。
这一特性对所有支持它的设定项都有效,只不过在Pre/PostProc过滤器中显得尤其有用。举个例子,你可以对HTML和LaTeX文件设定不同的样式:
%!style(html): fancy.css %!style(tex) : amssymb
这一特性使得用户便于对转换后的文件进行微调:
%!target: sgml %!options(sgml): --toc %!options(html): --style foo.css %!options(txt ): --toc-only --toc-level 2
在这个例子中,缺省的目标格式为SGML,并且生成目录表。如果用户调用命令“``txt2tags -t html file.t2t”,则仅仅使用针对HTML定义的选项,生成的文件会使用外联的样式表“foo.css”,并且不生成目录表。
%!postproc : this that %!postproc(html): that other
\n
和制表符\t
,均将被解释。
%!postproc: "undesired string" ""
$ cat file.t2t | preproc.sh | txt2tags | postproc.sh
\* \+ \. \^ \$ \? \( \) \{ \[ \| \\
%!postproc(html): '(</?)B>' '\1STRONG>'
%!postproc: PATT REPLACEMENT %!postproc: "PATT" "REPLACEMENT" %!postproc: 'PATT' 'REPLACEMENT' %!postproc: PATT "REPLACEMENT" %!postproc: "PATT" 'REPLACEMENT'
本章不推荐初级用户阅读。我们将在txt2tags的过滤器中使用一些复杂的模式和正则表达式,以此来实现一些“奇怪”的功能。
请注意:执行以下过程前建议谨慎,它们可能坏事,甚至于源文件中的某些文本在转换中会丢失,而不会出现在目标文件中。请在仅当你确实需要并且明白自己在干什么的情况下才使用这些技巧。
注:过滤器是强大却也危险的特性! 错误的过滤器会差生意想不到的结果。
请切记!
过滤器中,用于替换的模式表达式可以包含多行(以 \n
作为换行符)。
这便于在HTML目标文件中插入少量几行CSS规则,而毋需创建一个独立的外联样式表:
%!postproc: <HEAD> '<HEAD>\n<STYLE TYPE="text/css">\n</STYLE>' %!postproc: (</STYLE>) 'body { margin:3em ;} \n\1' %!postproc: (</STYLE>) 'a { text-decoration:none ;} \n\1' %!postproc: (</STYLE>) 'pre,code { background-color:#ffffcc ;} \n\1' %!postproc: (</STYLE>) 'th { background-color:yellow ;} \n\1'
如此,其余的过滤器通过替换一个插入的字符串而与第一个过滤器联系起来。现在,原来简单的一个“<HEAD>”变成了:
<HEAD> <STYLE TYPE="text/css"> body { margin:3em ;} a { text-decoration:none ;} pre,code { background-color:#ffffcc ;} th { background-color:yellow ;} </STYLE>
有时候你打算在某一特定格式的目标文件中插入一些文本,而其他的格式则不作改变,这一目标可以通过PreProc的一些小技巧来实现。
方法是:将这些文本作为注释插入源文件中,做上一些标记,而使用针对特定目标格式的过滤器将它们“反注释”掉。
举个例子来说,我们想要在HTML输出中加入一个额外的段落,于是把这些文本写成特殊的注释行,比如:
%html% This HTML page is Powered by [txt2tags http://txt2tags.org]. %html% See the source TXT file [here source.t2t].
这些行以%开头,属于普通的注释行,在转换时被忽略掉。但是当你添加一个过滤器之后:
%!preproc(html): '^%html% ' ''
通过显示的声明,这一过滤器仅仅在HTML作为目标格式时被应用。于是开头的百分号被移除,这些行被“激活”,不再是注释。
对于某些正则表达式控来说,他可以自行定制源文件的语法,将txt2tags的默认标记修改为自己喜欢的标记。
举个例子,位于行首的制表符是默认的引用标记,如果用户不喜欢,或者其编辑器关于制表符有奇怪的设定,他可以定义一个新的标记来标记引用域。比如他选择用用位于行首的“>>>”来作为引用标记,那么他只需定义一个简单的过滤器:
%!PreProc: '>>> ' '\t'
源文件里面的引用文本形如:
>>> This is a quoted text. >>> The user defined this strange mark. >>> But they will be converted to TABs by PreProc.
在解析之前,这些诡异的“>>>”符号会被自动的替换为制表符,txt2tags则识别出引用标记。
请注意:极端的PreProc规则会改变整个标记语法,甚至会在标记之前产生冲突,因此在使用前务必小心谨慎。
Txt2tags的第一个公开发布的版本 version 0.1 是在2001年7月,然而其原型则比这个时间早上至少一年……
本章将带领你纵览软件从最初的原型到当前版本的发展过程。
*bold*
、/italic/
、_under_
,以及转义典型的HTML特殊字符如 < & >
。不怎样对吧,但是!我还年轻呢,;)”
注:SED是UNIX下的流编辑器,用来进行文本的自动化编辑。
这一改进后的SGML版本支持更多的文档结构,比如列表、完全引用域等。在下面这个示例中,已经可以看到txt2tags标记的雏形了:
* This was a bold line (BOLD line oriented? Well...) -- - bullet list was very similar to txt2tags list - but with these -- to begin and close a list -- =---------------------- Verbatim text was delimited by the =-- pattern. The other ------- were just cosmetic. =----------------------
依然不怎样对吧。但是!接下来就是划时代的一步了……
一个txt2sgml.sed的示例文件:
* Hey, here are the first 3 magic lines * The document title / author / date * But they required those asterisks at the beginning MAIN TITLE Titles were made by uppercase-only lines. Subtitles were identified by leading spaces. Each space denoted a new sublevel. The beautifiers: *bold*, **strong**, "italic" and `typewriter`. - lists + sublists = and subsublists (by identifier, not indentation) Two blank lines to close lists. Links as www.example.com and e-mails were recognized automagically by regular expressions. And there was a strange image mark: %%image: path/to/image.jpg
%%date
,表格支持,基于网页的使用接口,图片智能对齐和生成目录表,这些功能一一实现。在0.2版本中,一个Shell脚本被添加进来作为外包,进行文件操作和命令行选项的处理——这样做的原因无非是因为我是个Shell老手,却是一个Python菜鸟。一直到0.9版本,txt2tags才又回到100%的Python代码。”
%!style
设定项,include
命令和强大的Pre/Post过滤器。”
%%mtime
、%%infile
、%%outfile
,以及%%toc
。未完待续……”
The End (查看源文件)
译文最后一次修订于:2009-03-24 13:06:52