LinuxDoc+Emacs+Ispell-HOWTO 中文版 作者: Philippe MARTIN () &nl; 英译者: Sébastien Blondeel () &nl; 中译者:李安珊 An-Shan Lee () v0.4, 27 February 1998 这份文件主要是提供给 Linux HOWTOs 的作者与译者及其他参与 Linux 文件计划 (Linux Documentation Project) 者参考使用。从本文大家可以找到一些有关使用Emacs 与 Ispell 工具的提示。 前文 版权

版权属於 Philippe Martin 1998&nl; 只要您遵守第二版或之後版本的 GNU 通用公开授权 (General Public License) 的条件,您可以重新散布 及/或 修改这份文件。 铭谢

特别感谢 Sébastien Blondeel。 Sébastien 是个非常罗哩吧嗦的人,不停的问我一大堆有关 Emacs 安装的问题。:-) 但也由於他所问的问题都很有意义,才使我能更深切的了解 Emacs,并将我所学到的知识发表出来,提供给大家参考。 评论

如果您有任何建议可以改善本文,请不要犹豫尽快的告诉我,我会仔细的参考您的意见。&nl;对於此文件所探讨的主题,如果您有任何问题的话,也请尽快的告诉我,我会非常乐意的回答您,因为您的发问或许也能帮助我改善此文件。 英译者注:假如大家认为这文件的英文很难懂的话,那就怪我翻译的不好。&nl; 中译者注:那如果大家对这中文文件有疑问的话,那还是怪罪英译者罗,因为我是照他的英文翻译过来的。:-P 开玩笑的,如果大家认为这份文件中文翻的不好,请多多包涵,并提供意见给我,以便我改善它,谢谢。 版本

这份文件与下列版本相关: Sgml-tools 版本 0.99, Emacs 版本 19.34, Ispell 版本 3.1, 本文举例内相关的 Emacs 程式库都与上列的 Emacs 版本一起发行, 简介 SGML

Standard Generalised Mark-up Language,或称为 SGML,是一种可以定义文件形态的语言。

譬如,您可以定义食谱的文件型态,第一部先呈现其主成分,第二部介绍佐料,第三部则一步一步的指示如何烘烤蛋糕,之後一幅好看的图画就可表现其可口美味了。

这就是所谓的文件形态定义 (Document Type Definition)。它并没有定义最後的产品应是什麽样子,它只说明文件的内容大约包括了什麽。

以此类推,您在读了我这食谱的型态定义的举例之後,您的脑子里就会有您自己类似的食谱,或者您想的正是您最喜欢的厨子所呈现给您的,对吧?然而,他们其实看起来都是不同的:在我的想像里,我的成果照片是放在浴室柜子的左上角,而主成分的表单是在後花园里,介於游泳池与烤肉区之间。您的呢?

多谢 SGML 的标准定义,我们可以按照其所提供的格式轻松的写一份文件,而不用担心最後读者会看不懂我们在写些什麽。 LinuxDoc 型态定义

正如您可能猜到的,这型态适用於写作关於 Linux 的文件。

此种文件通常建构如下:文件的开始是标题,接著是作者的名称,文件的版本号码与日期。再来是摘要(这样读者就不用在浏览过整篇文件之後才知道这并不是他们想看的文件),之後是目录,显示文件结构,这样一来那些急於想知道某一特定内容的人就可直接跳到那部分去读。

然後就是一系列的章节,段落等。在这部分,您可以插入部分程式,改变字体来强调某个字眼或句子,或插入列表 (lists),以导引读者至文件的另一部份读取相关资料,等等。

要写这种文件,您只需要正确的详细说明文件的标题,作者,日期,版本,章节部分,及大约说明何时将插入某一列表 (list),其包含的元件是什麽等等即可。 SGML-Tools

SGML-Tools可以将一文件的特殊规格转换成您所想要的格式。假如您要将此文件存在您个人的程式库,您可以选择转成 PostScript 格式。假如您要将它透过网路与世界分享,可将它转成 HTML 格式。假如您必须在 Windows 下读取此份文件,您可以把它转成 RTF 格式,并使用文书软体读取。或者您也可以将之转成上述所有格式,以便您任何时候使用。 您可从这 FTP 站 取得 SGML-Tools。 您的第一份文件

从一份纯文字档文件开始

假如您要将一纯文字档文件转成 SGML 以便再将之转成其他的格式,做法如下: 再最开头时加上下列字句与标签:

标题 (Title) 放此&etago;title> <author> 作者,作者的电子邮件帐号,等等。 &etago;author> <date> 版本及日期 &etago;date> </verb> <item> 如果您要在开头时摘要此文件的内容,请将下列标签用於此段落的头尾: <tt><abstract></tt> 与 <tt>&etago;abstract></tt>。 <item> 之後插入这 <tt><toc></tt> 标签, SGML-Tools 自会显示文件的<em>目录 (Table Of Contents)</em>。 <item> 再来,在每一章 (chapter) 的开始,以下列字句与标签取代每一章的号码及标题: <verb> <sect>这一章的标题 (The Title Of The Chapter) </verb> 再於这一章的结尾加上此 <tt>&etago;sect></tt> 标签。&nl; <p> <bf>注 :</bf> 您不需放上这一章的相对号码, SGML-Tools 自会帮您加上。 <item> 以相同的方法用於接下来的分节 (section)。您必须删除每一节的号码,并以此 <tt><sect1></tt> 标签标於每一节开头的标题,及在每一节的结尾标上 <tt>&etago;sect1></tt>。 <item> 在每一节中,您也可以使用 <tt><sectn></tt> 与 <tt>&etago;sectn></tt> 标签,将之分层多达 4 个层次,每一层使用同样的标签,其中 n=2,3, 或 4,依此类推。 <item> 之後,在每一段落 (paragraph) 的开始,插入 <tt><p></tt> 标签。 <item> 在段落中,如果您需要强调某些部分,就使用 <tt><it></tt> 与 <tt>&etago;it></tt> (<it>斜体</it>), <tt><bf></tt> 与 <tt>&etago;bf></tt> (<bf>粗体</bf>),或 <tt><tt></tt> 与 <tt>&etago;tt></tt> (<tt>打字体</tt>) 标签。 <item> 若要插入列表 (list),请依下列方式: <verb> 例子:这是一个四行的列表: - 第一行放在这里 - 跟著第二行 - 再来第三行 - 第四行。 </verb> 请以下列方式来标明上列列表: <verb> 这是一个四行的列表: <itemize> <item>第一行放在这里 <item>跟著第二行 <item>再来第三行 <item>t第四行。 &etago;itemize> </verb> <item> 当您要在段落中放进某程式的一部分,或者需要突显某些地方,请依下列方式: <verb> <verb> 10 REM 喔,老天!这是什麽? 20 REM 我以为这东西早就不见了! 30 PRINT "我回到..."; 40 PRINT "拯救世界。" 50 INPUT "你从哪得知的? ",M$ 60 IF M$="阿呆" THEN PRINT "你很聪明。":GOTO PARADISE 70 ELSE PRINT "虽然你仍是傻呼呼的。":GOTO RICHMOND &etago;verb> </verb> <item> 到目前为止,您所学到的 SGML 格式技术已经相当够用。假如您想再加强您的文件,您可以参考 <bf>SGML-Tools</bf> 的使用指引,里面详尽的介绍了有关 <bf>LinuxDoc</bf> 文件型态的应用。 </enum> </sect1> </sect> <sect>设定 <tt>Emacs</tt> <p> <sect1>重音文字 (Accented Characters) <p> 假如您需要以法文或其他西欧语言来写文件,您必须使用 8-bit 文字 (8-bit characters),才可显示其有重音的文字。这样的设置才可以令 Emacs 接受这些文字。 <sect2>显示 8-bit 文字 <p> 要令 Emacs 显示 8-bit 文字,您必须将下列指令加入您的 <tt>.emacs</tt> 档案: <verb> (standard-display-european 1) (load-library "iso-syntax") </verb> 假如您在一个不支援 8-bit 的终端机上使用 Emacs,您可以使用 <tt>iso-ascii</tt> 程式库 (<tt>(load-library "iso-ascii")</tt>),它会指令 Emacs 以最相似的形式来显示这些文字。 <sect2> 8-bit 文字的键入 <p> 假如您的键盘允许您键入有重音的文字,那就没有问题,要不然也可照下列方式来补救: <sect3><tt>Iso-acc</tt> 程式库 <p> Emacs <tt>iso-acc</tt> 程式库可以让您使用 7-bit 的键盘键入 8-bit 的文字。 <p> 只要将下列指令加入您的 <tt>.emacs</tt> 档案: <verb> (load-library "iso-acc") </verb> <p> 然後在使用 Emacs 时,开启您所需要编辑的档案,键入 <tt>Meta-x iso-accents-mode</tt>。 <p> 这样您若要键入法文 <em>café</em> 的 <bf>é</bf> 的话,您就可以先键入 <bf>'</bf> 然後再键入 <tt>e</tt>。总之,您需先键入那个文字的重音,之後再键入相对的字母(不论大写或小写)。以下是一些您可以使用的重音: <list> <item><tt>'</tt>~: Acute <item><tt>`</tt>~: Grave <item><tt>^</tt>~: Circumflex <item><tt>"</tt>~: Dieresis <item><tt>˜</tt>~: Tilde, cedilla, 与其他特别的例子 (cf iso-acc.el). <item><tt>/</tt>~: 在一字母上加线,等等。 </list> 如果您只需要这些重音符号之一,但不是相对的重音字母,那就在符号之後键入一空白键。例如,要输出 <it>l'éléphant</it>,就键入 <tt>l ' <cparam/空白/ ' e l ' e ...</tt> 即可。 <p> 您可以在 <tt>iso-acc.el</tt> 档案内找到所有您需要的重音组合。 <sect3><cparam/Meta/ 键 <p> 您可以在某些终端机上使用 <cparam/Meta/ (或 <cparam/Alt/) 键来键入 8-bit 文字。例如,您可以键入 <bf><cparam/Meta/-i</bf> 来输出 <bf>é</bf> 这个字。 <p> 但是就我所知, Emacs 将 <cparam/Meta/ 键用於其他场合,其他的程式库似乎也不提供这种重音输入方式。 <p> 不过我们还是可以以下列方式来补救: <verb> (global-set-key "\ei" '(lambda () (interactive) (insert ?\351))) _ ___ </verb> 只要将上列指令加入您的 <tt>.emacs</tt> 档案内,您就可以用 <bf><cparam/Meta/-i</bf> 来输出 <bf>é</bf>。您也可以重新定义您要的组合,只要您用您要的字键 (key) 取代 <bf>i</bf>,用正确的编码 (code) 取代 <bf>351</bf>,再配对起来,就可以得到您要的重音字母。您可参考 ISO-8859-1 character set 取得您要的编码。 <p> <bf>注意!</bf> 某些 local modes 或许会重新定义您的字键组合。 <sect2> 8-bit SGML 文字的显示 <p> 使用 SGML 时,您可以利用巨集 (macros) 来输入重音文字。例如,要输入 <bf/é/ 就可用 <bf/&eacute;/。但通常,需要读取 SGML 的应用软体都可以读取 8-bit 文字,所以一般都用不到这种巨集。或许有些软体仍然无法读取 8-bit 文字,那麽这时您就可以利用上述巨集了。 <p> 一般时候,在使用 Emacs 时,您可以利用 <tt>iso-sgml</tt> 程式库来输入重音文字。当您要将文件档案存到磁碟时,它也会帮您把 8-bit 文字转成 SGML 的格式,以方便您读取。 <p> 所以有了这个程式库,您就可以在使用 Emacs 时,轻松的输入或读取 8-bit 文字,甚至一个不接受 8-bit 文字的软体,也可以读取您编写的 8-bit 文件。 <p> 您只要将下列文字加入 <tt>.emacs</tt> 档案内,您就可以使用上述程式库: <verb> (setq sgml-mode-hook '(lambda () "Defaults for SGML mode." (load-library "iso-sgml"))) </verb> <sect1>SGML 模式 (SGML mode) <p> 当载入 <bf>.sgml</bf> 相关文件时, Emacs 通常会自动进入 <bf>sgml 模式</bf>。 假如没有的话,您可以键入 <tt>Meta-x sgml-mode</tt> 来驱动它进入 <bf>sgml 模式</bf>。或者将下列指令加入 <tt>.emacs</tt> 档案内来设定它自动进入: <verb> (setq auto-mode-alist (append '(("\.sgml$" . sgml-mode)) auto-mode-alist)) </verb> 在 sgml 模式下,您可以选择要如何输出 8-bit 文字。比如,使用 <tt>Meta-x sgml-name-8bit-mode</tt> (或是选单项目上的 <it>SGML/Toggle 8-bit insertion</it>),您可以选择直接输出 8-bit 文字的格式,或是输出 SGML 的格式(即 <bf>&...;</bf> 格式)。 在此模式下,您也可以使用 <tt>Meta-x sgml-tags-invisible</tt>(或是选单项目上的 <it>SGML/Toggle Tag Visibility</it>) 来选择是否要隐藏或显示 SGML 标签。 <sect1>PSGML 模式 (PSGML mode) <p> PSGML 模式对於在使用 Emacs 下编辑 SGML 文件很有助益。 <p> 这份文件 <htmlurl name="psgml-linuxdoc" url="http://www.linux-france.com/article/psgml-linuxdoc"> 解释了如何安装这个模式,及如何将之应用在 <it>LinuxDoc</it>。 <sect1>其他相关模式 <p> <sect2>Auto-fill mode <p> 在一般模式下,当您打完一个段落,您通常会键入 <cparam/Return/ 以便换到下一行,否则您文章的段落就会相连,无法分清楚。但当您使用 <cparam/Return/ 以便换到下一行时,您的段落的右边通常是参差不齐的。 <p> 但假如您不换到下一行而继续键入文字,在某些编辑器下,您就无法看到右边边界外的文字是什麽。 <p> 在这情形下,<bf>auto-fill</bf> 模式可以帮您改正这情况。当您键入超过预设值的第70列时,在这模式下,您就会自动换到下一行。 <p> 下列是执行 auto-fill 模式的指令,并可将一行的宽度调整为80列: <verb> (setq sgml-mode-hook '(lambda () "Defaults for SGML mode." (auto-fill-mode) (setq fill-column 80))) </verb> <sect>Ispell <p> 如果您要在使用 Emacs 时作拼字检查,您可以使用 <bf>Ispell</bf> 套件及其 Emacs 模式。 <sect1>选择您的预设辞典 (default dictionaries) <p> 您可以设定 Emacs,使之在开始载入某一文件时,便自动选择所需的辞典(您可以选择好几个)。预设辞典 (main dictionary) 即主要辞典,是与 Ispell 一起发行的辞典。您可以选择您所需要的语言。第二个即是您的个人辞典 (personal dictionary),您可以设定要 Ispell 将您在主要辞典里所找不到的字放到这里。 假如您要将 Ispell 里的法文辞典设为预设辞典,并想用您主目录 (home directory) 下的 <tt>.ispell-dico-perso</tt> 档案作为个人辞典,可以在 <tt>.emacs</tt> 档案里加入下列指令: <verb> (setq sgml-mode-hook '(lambda () "Defauts for SGML mode." (setq ispell-personal-dictionary "~/.ispell-dico-perso") (ispell-change-dictionary "francais") )) </verb> <sect1>为特定文件设定个别的辞典 <p> 如果您没有用同一语言来检查整份文件的拼字,那麽您可能会遇到一些困难。但当您在翻译文章时,您很有可能经常交换使用不同的语言与辞典。 <p> 不管是自动设定的或是手动的,我并不清楚 Lisp 是如何选择所需的主辞典和个人辞典。(如果您知道的话,请来信告诉我!) <p> 不过呢,在每一个档案的结尾,只要将下列指令加入作为注释,您都可以指定您现行的档案要使用哪一辞典。 Ispell 开始拼字检查时即可应用所指定的辞典: <verb> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> </verb> 假如您在 <tt/.emacs/ 档案里已经设定了预设辞典为法文,那您可以将上述指令加入您所写的英文文件的结尾,以便使用英文辞典。 <sect1>文件的拼字检查 <p> 若要检查整份文件,可在文件内任一处使用 <tt>Meta-x ispell-buffer</tt> 指令。您也可以检查文件某些部分的拼字: <itemize> <item> 将要检查拼字的部分之开头用 <tt>Ctrl-Spc</tt> 标注 (mark) (即所谓的 mark-set-command), <item> 然後标注到那部分的结尾, <item> 再键入指令 <tt>Meta-x ispell-region</tt>. </itemize> Emacs 就会开始执行 Ispell。当遇到辞典里所没有的字时,程式会显示这个字(通常以反白显示),并要求您输入下列指令: <itemize> <item><bf>spc </bf>accepts the word, this time only, <item><bf>i </bf>accepts the word and inserts it in your personal dictionary, <item><bf>a </bf>accepts the word for this session, <item><bf>A </bf>accepts the word for this file, and inserts it in the local file dictionary <item><bf>r </bf>allows you to correct the word by hand <item><bf>R </bf>allows you to correct all the occurrences of the misspelled word, <item><bf>x </bf>stops the checking, and puts the cursor back in place, <item><bf>X </bf>stops the checking and leaves the cursor where it is, letting you correct your file; you will be able to continue the spell-checking later if you type <tt>Meta-x ispell-continue</tt>, <item><bf>? </bf>gives you online help. </itemize> 如果 Ispell 找到类似的词汇,它会将这些文字显现在一小视窗内,每一个文字前都有号码标明,只要键入您要的那个字汇的号码, Ispell 就会以您所选的字取代错字。 <sect1>个人辞典与个别档案辞典 (local file dictionary) 的比较 <p> <bf>i</bf> 键让您可以在您的个人辞典内插入一个新字,而 <bf>A</bf> 键让您在个别档案辞典内插入新字。 <p> 个别档案辞典其实是一档案结尾所插入一系列的字或评论, Ispell 每次检查此档案的拼字时都会重新读取这个辞典。如此,您就可以键入一些只在这特定档案能接受的字,而其他档案则可不受此辞典影响。 <p> 在我看来,我认为个人辞典最好是用来储存一些主辞典所没有的字,尤其是那些属於各国语言的字(像是有连字符号 hyphenated 的字),及一些通用的特定名词(像是 <it>Linux</it>),但在个人辞典内加入太多像是姓名的单字也不太好,因为这些字就会被当作一般字使用了(您可以想像如果您把 <em>Tof</em> 加入个人辞典内, Ispell 可能就会在下列的例子里,忽略这个错字: <footnote><it>`When the going gets tof, the tof get going.'</it> <em>Tof</em> 是法文 <em>Christophe</em> 名字的缩写。</footnote>) <sect1>键入时的拼字检查 <p> 当您在键入文字时,只要您在这 <bf>ispell-minor-mode</bf> 模式下, Ispell 就会自动帮您检查拼字。要启动或关闭这模式,请键入这指令 <tt>Meta-x ispell-minor-mode</tt>。每当有 Ispell 查不到的字时,它就会<em>哔</em>一声来提醒您。 <p> 假如您觉得<em>哔</em>一声很烦人,只要键入指令 <tt>Meta-x set-variable RET visible-bell RET t RET</tt> ,您就可以改用萤幕的闪烁来提醒您。您也可以在 <tt>.emacs</tt> 档案里加入下列指令来关掉 Emacs 的声音: <verb> (setq visible-bell t) </verb> <sect>一些投机的技巧 <sect1>自动插入页首 (header) <p> 在 Emacs 下,您可以将任何事件<em>外挂 (hook)</em> 任何的动作(像是打开一个档案,储存,或执行一个新的模式,等等)。 <p> 您也可以利用 <bf>autoinsert</bf> 程式库来执行一些特别的动作:当您在 Emacs 下开新档案时,这个程式库就会根据档案的属性来插入相符的<em>标准</em>页首。 <p> 就我们的情形,这<em>标准</em>页首就是我们说明文件型态 (LinuxDoc),标题,作者,及日期的地方。 <p> 接下来我会描述两个如何插入这种页首的方法。您可以插入一个含有相关资讯的模板 (template) 档案,或者您也可以跑一跑 <bf>elisp</bf> 程式。 <sect2>藉由插入一个档案 <p> 当您开启一份档案时,首先您必须告诉 Emacs 执行<tt>自动插入</tt>,然後再读取 <bf>autoinsert</bf> 程式库的资料来宣告我们要改变的 <tt>auto-insert-alist</tt> 表单。这表单定义了不同档案型态所要插入的页首。它的预设值是要插入的档案必须在 <tt>~/insert/</tt> 目录下,但如果您要重新定义其 <tt>auto-insert-directory</tt> 也是可行的。 <p> 每一次您开启一份新的 SGML 档案时,只要在 <tt>.emacs</tt> 档案内加入下列指示,您就可以插入 <tt>~/emacs/sgml-insert.sgml</tt> 档: <verb> (add-hook 'find-file-hooks 'auto-insert) (load-library "autoinsert") (setq auto-insert-directory "~/emacs/") (setq auto-insert-alist (append '((sgml-mode . "sgml-insert.sgml")) auto-insert-alist)) </verb> 那您就可以在 <tt>~/emacs/sgml-insert.sgml</tt> 档写入您自订的页首,然後再重新执行 Emacs 来开启某一 <tt>foobar.sgml</tt> 档案,之後 Emacs 会询问您确认这自动插入的指令来插入您要的页首。 <sect2>藉由执行一个程式 <p> 这方法跟上述大同小异,但不同的是您必须设定 <tt>auto-insert-alist</tt> 表单,告诉它要插入的是一个执行程式,而非一个档案。只要在 <tt>.emacs</tt> 档案内加入下列指示,就可以自动执行,不过当然您得先把这程式写在一个叫做 <tt>~/emacs/sgml-header.el</tt> 的档案里才可以。(鉴於这函式可能会过长,您不需要将它放在 <tt>.emacs</tt> 档案里): <verb> (add-hook 'find-file-hooks 'auto-insert) (load-library "autoinsert") (add-to-list 'load-path "~/emacs") (load-library "sgml-header") (setq auto-insert-alist (append '(((sgml-mode . "SGML Mode") . insert-sgml-header)) auto-insert-alist)) </verb> 您可以参考<ref id="insert-sgml-header" name="附录">里有关 <tt>Insert-sgml-header</tt> 程式的例子。 <appendix> <sect><tt>Insert-sgml-header</tt>程式之□例<label id="insert-sgml-header"> <p> 读者在撰写一份 Linux Documentation Project 文件时,可以使用下列程式来启动自动插入自订的页首。 <p> 透过一 <em>mini-buffer</em>,上述程式会要求读者提供一些或许必要的资讯。 它会先询问要输出的标题是什麽,若您没有提供,则页首就不会显现标题。再来是日期,作者,作者的电子邮件帐号与 home page (最後两项可随意填入)。 接著它会询问翻译者的名字。若无,请直接键入 <em>Return</em>。若有,程式就会接著询问译者的电子邮件帐号及 home page (同样也是随意填入)。 再来它会把您的输入存入 current buffer,包括任何您输入的资讯格式,及摘要和第一章的标签。之後它会将游标导向您要键入摘要的的地方。 <verb> (defun insert-sgml-header () "Inserts the header for a LinuxDoc document" (interactive) (let (title author email home translator email-translator home-translator date starting-point) (setq title (read-from-minibuffer "Title: ")) (if (> (length title) 0) (progn (setq date (read-from-minibuffer "Date: ") author (read-from-minibuffer "Author: ") email (read-from-minibuffer "Author e-mail: ") home (read-from-minibuffer "Author home page: http://") translator (read-from-minibuffer "Translator: ")) (insert "<!doctype linuxdoc system>\n<article>\n<title>") (insert title) (insert "&etago;title>\n<author>\nAuthor: ") (insert author) (insert "&nl;\n") (if (> (length email) 0) (progn (insert "<htmlurl url=\"mailto:") (insert email) (insert "\" name=\"") (insert email) (insert "\">&nl;\n"))) (if (> (length home) 0) (progn (insert "<htmlurl url=\"http://") (insert home) (insert "\" name=\"") (insert home) (insert "\">\n&nl;"))) (if (> (length translator) 0) (progn (setq email-translator (read-from-minibuffer "Translator e-mail: ") home-translator (read-from-minibuffer "Translator home page: http://")) (insert "Translator : ") (insert translator) (insert "&nl;\n") (if (> (length email-translator) 0) (progn (insert "<htmlurl url=\"mailto:") (insert email-translator) (insert "\" name=\"") (insert email-translator) (insert "\">&nl;\n"))) (if (> (length home-translator) 0) (progn (insert "<htmlurl url=\"http://") (insert home-translator) (insert "\" name=\"") (insert home-translator) (insert "\">&nl;\n"))))) (insert "&etago;author>\n<date>\n") (insert date) (insert "\n&etago;date>\n\n<abstract>\n") (setq point-beginning (point)) (insert "\n&etago;abstract>\n<toc>\n\n<sect>\n<p>\n\n\n&etago;sect>\n\n&etago;article>\n") (goto-char point-beginning) )))) </verb> </article> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> <!-- LocalWords: bastien HOWTOs rushy HTML Dieresis phant eacute sgml caf --> <!-- LocalWords: tof Christophe autoinsert elisp Blondeel spc XEmacs -->