BAD GOOD
- My cool list - My cool list
- Should end here - Ends here
= No, not a title =
= Title =
BAD GOOD ** not bold** **bold** __not underline __ __underline__ // no way it is italic // //italic// [invalid link ] [label link] [ invalid_image.png ] [image.png]
BAD GOOD |no|it's|not|a|table| | this | is | a | table |
BAD GOOD : definition list : definition list - turned to bullet list? - bullet inside + and now it is numbered? + numbered inside bullet - what a mess! - back to bullet
写了一篇很长的文章之后,将之束之高阁。几个月后再继续编写这个有50页纸的庞然大物,你怎么才能对以前写的文章有个基本了解呢?这里有一个快速的办法来了解这篇文章的大致内容:
$ txt2tags --toc-only -t txt userguide.t2t
Part I - Introducing Txt2tags
The First Questions You May Have
Supported Formatting Structures
Supported Targets
Status of Supported Structures by Target
The Three User Interfaces: Gui, Web and Command Line
Part II - OK, I want it. Now what?
Download & Install Python
Download txt2tags
...
--toc-only 将会以源文档相同的转换格式输出文档的大纲。所以我们使用-t txt选项来输出纯文档. 我们还可以使用--enum-title选项来给输出内容加上序列号:
$ txt2tags --toc-only -t txt --enum-title userguide.t2t
1. Part I - Introducing Txt2tags
1.1. The First Questions You May Have
1.2. Supported Formatting Structures
1.3. Supported Targets
1.4. Status of Supported Structures by Target
1.5. The Three User Interfaces: Gui, Web and Command Line
2. Part II - OK, I want it. Now what?
2.1. Download & Install Python
2.2. Download txt2tags
...
如果这个文章大纲有很多层,你可以使用--toc-level选项,输出任意的层次:
$ txt2tags --toc-only -t txt --enum-title --toc-level 1 userguide.tt 1. Part I - Introducing Txt2tags 2. Part II - OK, I want it. Now what? 3. Part III - Writing and Converting Your First Document 4. Part IV - Mastering Txt2tags Concepts 5. Part V - Mastering Marks 6. Part VI - Mastering Macros 7. Part VII - Mastering Settings 8. Part VIII - Black Magic 9. Part IX - Txt2tags HISTORY
升级txt2tags到版本2.5或者更高,该版本可以使用--标记来表示划线文字。比如:--STRIKE--会显示为STRIKE。
对于旧的版本可以使用以下的过滤器来得到同样的效果:
%%% Support for --strike-- text in txt2tags older than 2.5
%
%!postproc(html): '--([^ ].*?)--' <s>\1</s>
%
%!style(tex): ulem
%!postproc(tex): --(.*?)-- \sout{\1}
如果你要在所有的文档中使用此过滤器, 请将该设置置于txt2tags 配置文件.
PreProc和PostProc过滤器默认情况下为大小写敏感的。这表示在匹配时“txt2tags"和“TXT2TAGS”是不同的。如果你想在匹配时忽略大小写,只要在匹配文字前加上“?i“。比如:
%preproc: '(?!)latex' 'LateX'
这样“latex","LATAEX","LAtex"之类的词汇都会被替代为“LaTeX“
txt2tags不能让段落居中显示,但是你可以让一个表格居中。 所以...
| This is a centered paragraph.
这行的显示结果为:
| This is a centered paragraph. |
注:这里的竖线前一定要有空格才能让表格内容居中。在末尾没有竖线,所以表格就不会显示边线。
注:这种方法有点烂,尽量不要使用
注:以(X)HTML为输出格式的最好将其段落置于DIV标记内并且利用CSS规则来使它居中。
如果你的文档会使用很多的链接(URL),文字很快会看起来很杂乱。让文字变得清晰起来的办法是将所有的链接保存在设置区,在那里创建一个链接库:
%!preproc: URLT2T http://txt2tags.sourceforge.net %!preproc: URLGOOGLE http://google.com?q=txt2tags+is+cool %!preproc: URLBLOG http://myblog.wordpress.com/2006/10/31/foo-bar-baz
然后你就可以在文档里这样引用这些链接了:
This site is powered by [txt2tags URLT2T]. For more information please [read my Blog URLBLOG] or [search Google URLGOOGLE].
现在来比较一下将链接保留在文档中的乱糟糟的版本:
This site is powered by [txt2tags http://txt2tags.sourceforge.net]. For more information please [read my Blog http://myblog.wordpress.com/2006/10/31/foo-bar-baz] or [search Google http://google.com?q=txt2tags+is+cool].
另外:如果有些链接你在其他文档中也经常使用,你可以创建一个在txt2tags的配置文件,或者新建一个urls.t2t文件来保存一个全局链接库。这样你的所有文档都可以使用了。这样的做法也使链接的修改变得很容易,你只需要在一处修改就可以更新所有的链接了。
作为上面这个应用技巧的升级版本,你可以给任何词语设置自动链接
%!preproc: '(?i)(txt2tags)' '[\1 http://txt2tags.sourceforge.net]' %!preproc: '(Google)' '[\1 http://google.com]' %!preproc: '(Yahoo! Groups)' '[\1 http://groups.yahoo.com]'
这样在文档中就不用再手动输入那些链接了,txt2tags会自动为你插入。
I do use Txt2tags, Google and Yahoo! Groups everyday.
转化为XHTML就是:
<p> I do use <a href="http://txt2tags.sourceforge.net">Txt2tags</a>, <a href="http://google.com">Google</a> and <a href="http://groups.yahoo.com">Yahoo! Groups</a> everyday. </p>
好用吧?注意到第一个过滤器中的“(?i)“标记了,它是用来忽略字符大小写的,这样“txt2tags“,"TXT2TAGS"等等就都可以被替换了。
下述的链接在转换后是无效的:
[Main page index.php?page=main] [Product details product?id=1234567]
将链接用引用标记(双引号)括住就可以使转换后的链接有效了:
[Main page ""index.php?page=main""] [Product details ""product?id=1234567""]
注:这是对于本地相对链接而言的,象这样的 www.example.com/product?id=1234567 URL默认就能被自动识别。
在不使用任何参数的情况下%%date宏会将当前的日期以ISO格式表示:YYYYMMDD。使用一个过滤器你就能改变这种默认的日期格式:
%!preproc: %%date %%date(%d-%m-%Y %H:%M)
如果你要在所有的文档中使用此过滤器 , 请将该设置置于txt2tags 配置文件.
Txt2tags不会将置于代码区块中的代码作语法加亮。如果要在txt2tags中实现这样的功能就会违反这个程序的简约风格而使其变得臃肿。
但是你可以使用其他语法加亮的工具并将结果保存在文件中。然后你就可以使用txt2tags的Tagged Include功能将该文件在输出转换是包含进来。
%!%!include(html): "colorized-file.py.html"
如果你使用Vim 编辑器,可以使用以下的命令让你的代码语法加亮并以HTML格式输出(请按照2html.vim在你系统中的路径修改以下命令)
vi -c "so /usr/share/vim/vim71/syntax/2html.vim|wqa" file.py
你可以毫无问题的直接在源文件中输入 ©和 ® 标记。关键是怎么输入。当然你可以用拷贝和粘贴。(从这里拷贝)
注: 在Vim中,你可以按Ctrl-K Co及Ctrl-K Rg来插入上述符号。 :dig命令会显示出其他的符号。
根据不同的输出格式,你可以指定相应的字符编码.如果碰到了什么问题,可以尝试在你的设置区添加如下一行设定:
%!encoding: iso-8859-1
™符号的输入就要有点技巧了,因为它存在于新的UTF-8编码中。首先要以UTF-8的编码保存源文件。请检查一下你的文本编辑器的设定。然后你要指定txt2tags使用这个新的编码:
%!encoding: utf-8
额外提示: 如果你要在文本中输入符号或沉音字符等,最好使用UTF-8编码的文档。你不用费时去了解所有情况,只要记住这种编码方式有所有你所需的符号:)
另外的办法就是使用输出文件格式中代表这几个符号的字符。你可以在源文档中输入类似“(C)","(R)","(TM)"的字符,让过滤器来做相应的转换工作。但要记住的是不同的输出格式要有对应的过滤器设定。以下是针对HTML的:
% Filters to use (C), (R) and (TM) as copyright symbols %!postproc(html): \(C\) © %!postproc(html): \(R\) ® %!postproc(html): \(TM\) ™
txt2tags中你可以在三个层次上进行设置:
如果你在不同的地方做了很多的设置,事情可能会搞的不可收拾。尤其是如果你还用了%!includeconf命令包含更多的设置信息。
如果被这些分散在不同地方的设置搞晕了脑袋,可以使用--dump-config命令行选项来查看所有这些设置。首先会列出所有在RC文件中的设置:
$ txt2tags --dump-conf userguide.t2t RAW config for RC file (all) target........: html
然后是在源文件的设置区中的设置。注意第一列中的信息表示这个设置是针对什么输出格式的。“All“表示该设置可以用于所有的输出格式。
RAW config for source document
(all) target........: html
(all) options.......: --toc --toc-level 2 --css-sugar
(all) options.......: --css-sugar --no-toc --style userguide.css
(all) postproc......: ('<H3>Aurelio, .*', '')
(all) preproc.......: ('IMGPATH', '.')
...
(html) preproc.......: ('^%nopdf', '')
(html) preproc.......: ('^ *--------*', '')
(html) preproc.......: ('^ *========*', '')
再接下来是命令行选项:
RAW config for command line (all) dump-config...: ON (all) infile........: userguide.t2t (all) realcmdline...: ['--dump-conf', 'userguide.t2t']
在这些列表的后面是被解析的设置。这是源文件作转换处理时所用到的全部设置。
Full PARSED config
css-sugar.....: ON
dump-config...: ON
infile........: userguide.t2t
realcmdline...: --dump-conf, userguide.t2t
sourcefile....: userguide.t2t
style.........: userguide.css
target........: html
toc-level.....: 2
Active filters
preproc.......: IMGPATH -> .
preproc.......: MARKPROP -> **Properties:**
preproc.......: MARKCONT -> **Contains:**
...
preproc.......: ^%nopdf ->
preproc.......: ^ *--------* ->
preproc.......: ^ *========* ->
postproc......: <H3>Aurelio, .* ->
某些输出格式可以为每个表格单元作对齐,比如HTML。其他的可能更严格,只能对齐表格的列,然后所有的表格单元都使用该位置设置。比如:SGML,LaTeX,和Man都属于此类。
在后者这些输出格式中,列对齐是有由表格的第一行的单元格中所定义的(一般为标题行)。在输入这样的文本是要注意这点。
| Name | Age | | John Smith | 55 | | Mary Katana | 23 |
在以上的例子中,在提到的输出格式中表格的两列都会被居中,无论在第二,三行的表格单元位置如何。
它们是用来在HTML和XHTML输出文件中插入CSS格式标记的。
其包括:
该命令行选项清理了原来的格式属性并将内容置于新的DIV标记内,使之能方便的使用CSS规则。这样你会看到页面包含了三个组件,header,toc,和body,接下来就可以分别为他们设置CSS规则了。
注: 使用--style 并不隐含表示--css-sugar。你需要同时声明这两个选项。
Txt2tags没有标记断行的符号。在实际应用中,也许标点列表,表格或格式化文本更适合。
如果你确实需要断行符,你可以自己来设计一个标记。比如用“@@”来作为断行符。
%!postproc( html): @@ <BR> %!postproc(xhtml): @@ <BR>
然后在文本中需要用到断行符的地方插入@@。比如:
First line @@ Second Line @@ Third line
txt2tags默认情况下使用的是老的符号标记(<B>,<I>,<U>,<S>)来表示黑体,斜体,下划线,和划线文本。
有些人希望使用语义符号(<strong>,<em>,<ins>,<del>)来替代。这样的话,你可以设置以下一些过滤器:
% Use semantic tags (strong, em, ins, del) instead visual (B, I, U, S) %!postproc(html): '(?i)(</?)b>' '\1strong>' %!postproc(html): '(?i)(</?)i>' '\1em>' %!postproc(html): '(?i)(</?)u>' '\1ins>' %!postproc(html): '(?i)(</?)s>' '\1del>'
如果你要在所有的文档中使用此过滤器, 请将该设置置于txt2tags 配置文件.
Txt2tags没有设置文本的上标记和下标记。我们可以自己动手来制作下例中的标记:
^^text^^应用上标记文本
,,text,,应用下标记文本
们使用前一个技巧来实现它,以下是所需的过滤器:
% The ^ need to be escaped by \ %!postproc(html): \^\^(.*?)\^\^ <sup>\1</sup> %!postproc(html): ,,(.*?),, <sub>\1</sub>
设置这些过滤器后,^^upper^^和,,lower,,会转变为:<sup>upper</sup> 和<sub>lower</sub>。
另外,你也可以使用CSS标记的版本:
%!postproc(html): \^\^(.*?)\^\^ <span class="textsup">\1</span>
%!postproc(html): ,,(.*?),, <span class="textsub">\1</span>
% On the CSS:
% .textsup { vertical-align: super }
% .textsub { vertical-align: sub }
如果你要在所有的文档中使用此过滤器, 请将该设置置于txt2tags 配置文件.
txt2tags中有使用本地图片的标记,但是没有链接图片的标记。这里的办法是让txt2tags认为链接图片在本地。
有两种办法来实现。第一种使用过滤器:
%!postproc(html): RemoteImage.jpg http://www.example.com/myimage.jpg Hi, check out my picture: [RemoteImage.jpg].
这样txt2tags会生成图片标记<IMG SRC="RemoteImage.jpg">而过滤器会使它变为<IMG SRC="httpL//www.example...">。
另外一个办法输入时更容易,但依赖txt2tags的功能可能在未来版本中不会再提供了。使用raw mark括住图片地址(一直到文件的.以前):
Hi, check out my picture: [""http://www.example.com/myimage"".jpg]
简单吧!
txt2tags已经对所有图片添加了空的ALT=""标记,你可以使用PostProc来填充它:
%!postproc(xhtml): '(?i)(city.jpg.*?alt=")' '\1this is my city' %!postproc(xhtml): '(?i)(beach.jpg.*?alt=")' '\1a really nice beach' Hello, this is a photo of my city: [city.jpg] And this the beach near here: [beach.jpg]
上面的文字会转换为:
<p> Hello, this is a photo of my city: <img align="right" src="city.jpg" border="0" alt="this is my city"/> And this the beach near here: <img align="right" src="beach.jpg" border="0" alt="a really nice beach"/> </p>
PostProc规则使用了正则表达式来匹配ALT属性以前的内容。如果你不理解这些标记也不必担心,只用拷贝&粘贴这些行并且替换掉alt内的文字和city.jpg文件,不要改变其他就可以了。
你可以结合使用Raw line标记和PostProc过滤器来插入任意的(X)HTML标记。
首先,我们要设定使用什么符号来表示<和>字符。流行的选择是{{和
}}。接着在Raw Line中输入你的标记。例如:
%!postproc(html): {{(.*?)}} <\1>
""" {{div id="mycooldiv"}}
This paragraph will live inside mycooldiv DIV.
""" {{/div}}
以上的文本会输出下面的HTML代码:
<div id="mycooldiv"> <P> This paragraph will live inside mycooldiv DIV. </P> </div>
注:段落下的空白行是为了保证段落会在DIV前标记结束。如果去掉这个空行,产生的结果会出现错位:<div><p></div></p>。
注:标记符号计划在未来的txt2tags的版本中引入,那时就不需要这样的处理了。
当今所有的浏览器都知道如何处理沉音字符,你无需使用HTML的字符实体比如é或者ã来表现他们。直接输入这些字符就可以了。
唯一需要做得是正确的指定你的源文档的字符编码。你可以使用txt2tags的--encoding命令行选项或%!encoding宏指令来处理。比如:
% My source file is encoded in UTF-8 %!encoding: UTF-8 % My source file is encoded in latin-1 (ISO-8859-1) %!encoding: iso-8859-1
如果因为系统的特殊原因你确实要使用实体字符的,你可以用过滤器来转换这些沉音字符。如果你只使用某些字符,为每个字符设置一个过滤器(包括小写和大写):
% Convert accented chars to HTML entities: é -> é %!postproc(html): á á %!postproc(html): â â %!postproc(html): à à %!postproc(html): ã ã %!postproc(html): ä ä %!postproc(html): Á Á % ...
如果你需要对所有的沉音字符的一般解决方案,请使用下面这组过滤器:
% Convert accented vowels (plus Ç and Ñ) to HTML entities %!postproc(html): ([ÁÉÍÓÚáéíóú]) &\1acute; %!postproc(html): ([ÀÈÌÒÙàèìòù]) &\1grave; %!postproc(html): ([ÄËÏÖÜäëïöü]) &\1uml; %!postproc(html): ([ÂÊÎÔÛâêîôû]) &\1circ; %!postproc(html): ([ÃÕãõ]) &\1tilde; %!postproc(html): &[ÁÀÃÄÂ](\w+;) &A\1 %!postproc(html): &[áàãäâ](\w+;) &a\1 %!postproc(html): &[ÉÈËÊ](\w+;) &E\1 %!postproc(html): &[éèëê](\w+;) &e\1 %!postproc(html): &[ÍÌÏÎ](\w+;) &I\1 %!postproc(html): &[íìïî](\w+;) &i\1 %!postproc(html): &[ÓÒÖÔÕ](\w+;) &O\1 %!postproc(html): &[óòöôõ](\w+;) &o\1 %!postproc(html): &[ÚÙÜÛ](\w+;) &U\1 %!postproc(html): &[úùüû](\w+;) &u\1 %!postproc(html): Ñ Ñ %!postproc(html): ñ ñ %!postproc(html): Ç Ç %!postproc(html): ç ç
如果你要在所有的文档中使用此过滤器, 请将该设置置于txt2tags 配置文件.
所要做的是将源文档用txt2tags转换为(X)HTML文件,然后使用HTMLDOC工具来分割它。比如:
htmldoc -t htmlsep -o output -folder file.html
你可以在这个博客上获得HTMLDOC的安装和使用方法。
译者注: 非常遗憾的是htmldoc目前(包括v1.9.x)并不支持中文
如果你要迁移你的网站为txt2tags,这里有一个不错的Vim脚本可以将你的HTML文件转换为t2t标记的文本。
:source /path/to/unhtml.vim
<yourfile>.html.t2t的txt2tags文件将会保存。检查其中的内容,如果有什么错误手动修改它。
对所有的HTML文件重复上面的步骤。
提示:如果你想保留脚本不能识别的标记,你可以在该行的开头加双引号注释掉脚本的第85行。默认的情况下这些不能识别的脚本会被删除:
" mmmmm, dangerous! it removes all remaining HTML tags " %s,<[^>]*>,,ge
注: Vim编辑器在Linux和Mac OS X上是默认安装的。windows用户需要下载并安装Vim。
默认情况下txt2tags所生成的帮助文档归类到Linux文档的第一章节(用户命令)。实际上你可以将其归类到以下的任何一个章节中。
| 编号 | 主题 |
|---|---|
| 1 | 用户所使用的命令 |
| 2 | Unix和C的系统调用 |
| 3 | C语言程序库例程 |
| 3 | 特殊的文件名 |
| 4 | Unix文件的格式及转换 |
| 5 | 游戏 |
| 6 | 文字处理程序包 |
| 7 | 系统管理命令和步骤 |
要改变Man帮助文档的所属章节号要使用到PostProc过滤器:
%!postproc(man): "^(\.TH.*) 1" "\1 5"
改变数字“5”为任意希望归入的章节号。注意当中的空格。拷贝&粘贴这条指令以避免出错。
如果你要在所有的文档中使用此过滤器, 请将该设置置于txt2tags 配置文件.
帮助文档页面使用了标准的格式来显示程序的命令选项。可以使用定义列表让你的帮助页面看起来与系统的帮助页面完全一致。注意那些黑体标记和每个定义项前的空格。比如:
= OPTIONS = : **--dump-config** print all the config found and exi : **-h**, **--help** print help information and exit : **-V**, **--version** print program version and exit
你可以使用双线(============)来给MagicPoint中的当前幻灯片设置一个暂停。这样你就可以在需要解释说明时让它暂停,然后按空格键继续播放其他的幻灯。
可以设置任意多个暂停,甚至每个幻灯一个暂停。例如:
= My nice slide = - Item one ==================== - Item two ==================== - Item three ==================== - Item four -
你可以使用样式设置在你的文档中载入任何LaTeX程序包。例如:
%!style(tex): amssymb % The --style command line option is another alternative
这样就会在你的LaTeX文档的导言区创建\usepackage{amssymb}行。多个程序报可以在一行里调用:
%!style(tex): amssymb,booktabs,array,paralist
% Will turn into \usepackage{amssymb,booktabs,array,paralist}
从txt2tags版本2.3.1开始,可以定义多个样式设置行,这样就可以方便的使用PostProc过滤器来对每个程序包作设置。例如:
%!style(tex): amssymb %!style(tex): booktabs %!style(tex): array !style(tex): paralist % This will create four \usepackage lines
如果你要在所有的文档中使用此设置, 请将该设置置于txt2tags 配置文件.
txt2tags中头(header)标记的第三行一般用于文档的日期。如果你留空,日期标记就不会生成。但是在LaTeX中如果没有找到日期标记,它会自动在文档的封面显示当前日期。有些人可能并不希望这样。
要强制文档不设置任何的日期,需要在LaTeX代码中保留一个空的日期标记:\date{}。你可以利用PostProc过滤器来处理:
``` %!postproc(tex): \\date{-} \date{}
在你的源文档中,只要在第三行加一个横杠:
My doc John Doe -
这个过滤器会自动移除这个横杠,生成的LaTeX留下一个空白的日期标记,这样就不会再打印出日期来了。
提示:如果Tex处理器显示作者标记缺失的信息,你可以用类似的方法设置另一个过滤器:
%!postproc(tex): \\author{-} \author{}
如果你要在所有的文档中使用此设置, 请将该设置置于txt2tags 配置文件.
于文本编码(字符集)可以直接使用编码设置。然后添加babel程序包并且创建一个PostProc过滤器来插入语言项,如下所示:
% Brazilian Portuguese configuration
%!encoding: iso-8859-1
%!style(tex): babel
%!postproc(tex): {babel} [brazil]{babel}
这样就会在LaTeX的导言区添加一下两行:
\usepackage[latin1]{inputenc} % char encoding
\usepackage[brazil]{babel} % user defined package
请注意IANA标准的编码名称自动转换为适用LaTeX的编码名称了(此例中iso-8859-1转换为latin1)。
创建你自己的样式文件(比如:myrules.sty),其中包括所有你平时写在导言区的使用的程序包和设置。
然后只要使用样式设置来指定你的文件。清记得包含文件的相对地址。文件必须要有.sty扩展名。你可以使用任意多的样式文件。例如:
%!style(tex): ../../common.sty %!style(tex): ../../pdfthings.sty %!style(tex): projectrules.sty
注: txt2tags从版本2.31开始支持这种多样式行设置
如果你要在所有的文档中使用此设置, 请将该设置置于txt2tags 配置文件.
在LaTeX中通常使用$\mu$来表示希腊字母µ。你可以在txt2tags源文档中直接输入这个字符,然后使用PostProc宏来转换其为LaTeX的表示方法。
%!postproc(tex): "µ" "$\mu$"
你可以对你常用的希腊字母或其他特别字符创建类似的过滤器。
如果你要在所有的文档中使用此过滤器, 请将该设置置于txt2tags 配置文件.
:!txt2tags %
!表示执行一个外部命令,%代表当前的文件。如果你设置了%!target选项就可以不用在命令行上输入-t选项了。
注意Vim的命令行模式是有历史记录的,所以你只要输入一次,下次转换你只要输入:
:<arrow-up>
如果你希望在退出Vim后始终能保留这些历史记录,请~/.vimrc中输入:
set viminfo='10,\"30,:40,%,n-/ .viminfo
Frank Mueller
在~/.vimrc文件中输入以下几行设置,就可以很方便的在Vim中作文件转换了:
map 2l :w<CR>:!txt2tags -t tex % ; xelatex %<.tex ; open %<.pdf<CR> map 2h :w<CR>:!txt2tags -t html % ; open %<.html<CR> map 2t :w<CR>:!txt2tags -t txt % <CR>