如何在Org-mode中创建可以正确导出到LaTeX的不间断空格(tie)

时间:2012-02-16 12:48:52

标签: emacs latex whitespace org-mode

在(La)TeX中,非破坏空间称为tie,它们由~生成。例如,在缩写之后使用关系,以便在它们之后不直接断行,并且使得结束缩写的点不被视为结束语句。后者的使用很重要,因为标准的LaTeX在点之后比在单词之间留出更长的空间。

从组织模式导出到LaTeX时,~被视为显式字符,而不是平局字符。忽略使用不间断空格不是一种替代方法,因为它会导致错误的间距(参见上例中的第二句)。一种替代方法是强制组织模式将~视为具有#+BEGIN_LaTeX ~ #+END_LaTeX的LaTeX,但它是详细的并导出到其他格式中断。最后,如http://comments.gmane.org/gmane.emacs.orgmode/24716中所述,使用UTF-8不间断空格不起作用,因为LaTeX不会将其视为空格。那么,如何在Org-mode中使用正确导出到LaTeX的非中断空格?

这是一个澄清的例子。第一句失败是因为~被视为显式字符。显然,第二句失败了,因为最后一个点被视为LaTeX的一个句子。第三句出口得当,但是很冗长,并且会导致出口到其他格式。第四行(由 C-x 8 Space 插入的UTF-8非破坏空格分隔)失败,因为LaTeX不将其视为空格:

#+title:Title

e.g.~example

e.g. example

#+BEGIN_LaTeX
e.g.~example
#+END_LaTeX

e.g. example

将( C-x C-e L )导出到以下LaTeX代码:

e.g.\~{}example

e.g. example

e.g.~example

e.g. example

呈现为:

LaTeX rendered

我在Emacs 23.3.1中运行Org-mode 7.6。

4 个答案:

答案 0 :(得分:17)

http://orgmode.org/manual/Special-symbols.html上我找到了双倍间距问题的解决方案:

单位

e.g.\nbsp{}example

乳胶

e.g.~example

答案 1 :(得分:7)

答案在您链接的gmane线程中暗示。特别是last reply表示使用\nbsp作为不间断的空间。这本身不起作用,因为你需要\nbsp之后的空格才能将它识别为命令,而不仅仅是文本的一部分。

但是以下工作(添加到您的尝试列表中:

#+title:Title

* Test
1) e.g.~example

2) e.g. example

3) 
  #+BEGIN_LaTeX
    e.g.~example
  #+END_LaTeX

4) e.g. example

5) e.g.\nbsp example
   (non-breaking \240 space between \nbsp and example)

哪些输出到LaTeX:

\item e.g.\~{}example
\item e.g. example
\item e.g.~example
\item e.g. example
\item e.g.~ example %\240 non-breaking between ~ and example

这就是:

Rendered


修改

我只是重新测试了我的结果,不知怎的,我的非破坏空间第一次没有正确导出,我的结果发生了变化(朝向应该预期的而不是显示的内容)。下面的新结果可以保留历史记录并使评论有意义。

组织
#+title:Title

* Test
1) e.g.~example

2) e.g. example

3) 
  #+BEGIN_LaTeX
    e.g.~example
  #+END_LaTeX

4) e.g. example   %Space is non-breaking

5) e.g.\nbsp example    %Space is non-breaking
胶乳
\item e.g.\~{}example
\item e.g. example
\item e.g.~example    
\item e.g. example    %Space is non-breaking
\item e.g.~ example   %Space is non-breaking
渲染

enter image description here

这对应于规定的双倍间距(以及正确导出的非破坏空间)

答案 2 :(得分:7)

所有其他答案都运作良好,但为了完整起见,我想提及org-entities。更重要的是,因为您可以利用此机制执行更多通用的导出自定义,以及支持多个后端。

org-entities设置为以下内容:

(setq org-entities-user
      '(("space" "~" nil " " " " " " " ")))

以下组织来源:

E.g.\space{}a, b, c

导出到LaTeX:

E.g.~a, b, c

并将HTML导出为:

<p>
E.g.&nbsp;a, b, c</p>

答案 3 :(得分:5)

我在文档/模板/骨架的标题中包含以下内容:

\#+LaTeX_HEADER: \DeclareUnicodeCharacter{00A0}{~}

我使用C-x 8 SPC在文本中插入unicode不间断空格。这应该可以导出到LaTeX或HTML。

说明:

DeclareUnicodeCharacter在文件utf8.definputenc用来定义utf8映射的文件)中定义,以定义Unicode字符的含义。第一个参数是字符的十六进制代码,第二个参数是替换的LaTeX代码。

非中断空格为U+00A0,因此第一个参数为00A0。在LaTeX中,使用波浪号生成不间断空格,因此第二个参数是单个波形符。