Как я могу сделать неразрывное пространство в reStructuredText?
Очевидным, но проблемным решением является:
`word A`
Но это может быть рассмотрено по-разному различными реализациями, такими как rst2latex или rst2pdf. Плюс это выделено курсивом.
Как я могу сделать неразрывное пространство в reStructuredText?
Очевидным, но проблемным решением является:
`word A`
Но это может быть рассмотрено по-разному различными реализациями, такими как rst2latex или rst2pdf. Плюс это выделено курсивом.
Я не вижу здесь проблемы, запуская docutils v0.9. По крайней мере rst2latex и rst2html ведут себя корректно относительно неразрывного пробела. Латекс генерирует ~ и html генерирует & nbsp; когда вы вводите неразрывный символ (\ xa0,\0240).
Возможно, у вас есть проблема с редактором? Если вам удастся ввести символ, docutils выполнит задание.
Вам нужна директива unicode, но она может использоваться только в подстановках. Поэтому вам нужно определить такую подстановку:
.. |nbsp| unicode:: 0xA0
:trim:
а затем используйте его следующим образом:
xx |nbsp| xx
:trim:
, чтобы избавиться от этих пространств вокруг подстановки.
Вы также можете использовать |_|
вместо |nbsp|
, который менее визуально навязчив, если задана цель reStructuredText для чтения в виде обычного текста.
Я не тестировал его, но, возможно, вы можете использовать http://docutils.sourceforge.net/docs/ref/rst/directives.html#unicode-character-codes и символ Unicode без пробела: http://www.fileformat.info/info/unicode/char/a0/index.htm
В итоге я придумал обход для Сфинкса. Я перезаписываю 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:
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
Это не очень красиво, и это даже не позволяет вам избежать символа ~
, но он работает для моих целей.