restructuredtext - cheatsheet - rst file
¿Cómo puedo hacer un espacio sin ruptura en reStructuredText? (5)
Necesita la directiva Unicode, pero solo puede usarse en sustituciones. Entonces necesitas definir una sustitución como esta:
.. |nbsp| unicode:: 0xA0
:trim:
y luego usarlo así:
xx |nbsp| xx
:trim:
está ahí para deshacerse de esos espacios alrededor de la sustitución.
¿Cómo puedo hacer un espacio sin ruptura en reStructuredText?
Una solución obvia pero problemática es:
`word A`
Pero podría ser tratado de manera diferente por diferentes implementaciones, como rst2latex o rst2pdf. Además se traduce en cursiva.
No lo he probado, pero quizás pueda usar http://docutils.sourceforge.net/docs/ref/rst/directives.html#unicode-character-codes y el carácter "sin espacio de ruptura" en el código Unicode: http://www.fileformat.info/info/unicode/char/a0/index.htm
No veo el problema aquí, ejecutando docutils v0.9. Al menos rst2latex y rst2html se comportan correctamente con respecto a los espacios en blanco sin interrupciones. Latex genera ~ y html genera & nbsp; cuando ingresa un carácter que no se rompe (/ xa0, / 0240).
Tal vez usted tiene un problema de editor? Si puede ingresar el carácter, docutils hará el trabajo.
También puedes usar |_|
en lugar de |nbsp|
que es menos intrusivo visualmente, dado el objetivo de reStructuredText de ser legible como texto sin formato.
Terminé con una solución para Sphinx. Sobrescribo los escritores HTML y LaTeX para convertir el carácter ~
en un espacio que no se rompa. Aquí está el 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
y el de 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
No es tan bonito, y ni siquiera te deja escapar del carácter ~
, pero funciona para mis propósitos.