如何在reStructuredText中创建一个不间断的空间?
一个明显但有问题的解决方案是:
`word A`
但是不同的实现可能会对它有所不同,例如rst2latex或rst2pdf。另外,它以斜体显示。
答案 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)
我还没有测试过,但也许你可以使用http://docutils.sourceforge.net/docs/ref/rst/directives.html#unicode-character-codes和unicode“no break space”字符:http://www.fileformat.info/info/unicode/char/a0/index.htm