31

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

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

`word A`

但它可能会被不同的实现区别对待,例如 rst2latex 或 rst2pdf。此外,它以斜体显示。

4

5 回答 5

37

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

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

然后像这样使用它:

xx |nbsp| xx

:trim:是否可以摆脱替换周围的那些空间。

于 2012-08-27T16:05:24.027 回答
9

考虑到 reStructuredText 的目标是像纯文本一样可读,你也可以使用它|_|来代替视觉上的干扰。|nbsp|

于 2013-01-09T15:29:14.260 回答
5

我在这里看不到问题,运行 docutils v0.9。至少 rst2latex 和 rst2html 在不间断空白方面表现得很好。Latex 生成 ~ 和 html 生成   当您输入一个不间断字符(\xa0、\0240)时。

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

于 2012-08-29T00:58:40.920 回答
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

和乳胶一个:

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

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

于 2012-08-27T16:52:01.453 回答
0

我没有测试过,但也许你可以使用http://docutils.sourceforge.net/docs/ref/rst/directives.html#unicode-character-codes和 unicode“无中断空间”字符:http://www .fileformat.info/info/unicode/char/a0/index.htm

于 2012-08-07T13:45:26.523 回答