如何在reStructuredText中创建一个不间断的空间?

时间:2012-08-06 14:25:52

标签: restructuredtext

如何在reStructuredText中创建一个不间断的空间?

一个明显但有问题的解决方案是:

`word A`

但是不同的实现可能会对它有所不同,例如rst2latex或rst2pdf。另外,它以斜体显示。

5 个答案:

答案 0 :(得分:22)

您需要unicode指令,但它只能用于替换。所以你需要定义这样的替换:

.. |nbsp| unicode:: 0xA0 
   :trim:

然后像这样使用它:

xx |nbsp| xx

:trim:可以摆脱替换周围的空间。

答案 1 :(得分:9)

考虑到reStructuredText的目标是以纯文本形式阅读,您也可以使用|_|代替|nbsp|,这种视觉侵入性较小。

答案 2 :(得分:6)

我在这里看不到问题,运行docutils v0.9。 至少rst2latex和rst2html在非破坏空白方面表现正常。 Latex生成〜和html生成& nbsp;输入非破坏字符时(\ xa0,\ 0240)。

也许你有编辑问题?如果您可以设法输入字符,docutils将完成这项工作。

答案 3 :(得分:1)

我最终想出了一个针对Sphinx的解决方法。我覆盖了HTML和LaTeX编写器,将~字符转换为不间断的空格。这是HTML的一个:

import sphinx.writers.html
BaseTranslator = sphinx.writers.html.SmartyPantsHTMLTranslator

class CustomHTMLTranslator(BaseTranslator):

    def bulk_text_processor(self, text):
        if '~' in text:
            text = text.replace('~', ' ')
        return text

sphinx.writers.html.SmartyPantsHTMLTranslator = CustomHTMLTranslator

和LaTeX one:

import sphinx.writers.latex
BaseTranslator = sphinx.writers.latex.LaTeXTranslator

class DocTranslator(BaseTranslator):

    def visit_Text(self, node):
        if self.verbatim is not None:
            self.verbatim += node.astext()
        else:
            text = self.encode(node.astext())
            if '\\textasciitilde{}' in text:
                text = text.replace('\\textasciitilde{}', '~')
            if not self.no_contractions:
                text = educate_quotes_latex(text)
            self.body.append(text)

sphinx.writers.latex.LaTeXTranslator = DocTranslator

它不是那么漂亮,它甚至不会让你逃脱~角色,但它适用于我的目的。

答案 4 :(得分:0)