【问题标题】:How can I make a non-breaking space in reStructuredText?如何在 reStructuredText 中创建一个不间断的空间?
【发布时间】:2012-08-03 12:57:22
【问题描述】:

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

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

`word A`

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

【问题讨论】:

    标签: restructuredtext


    【解决方案1】:

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

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

    然后像这样使用它:

    xx |nbsp| xx
    

    :trim: 可以消除替换周围的那些空格。

    【讨论】:

    • 对我来说,0xA0 替换似乎是 HTML 中的字符 32 :(
    • 1) xx\ |nbsp|\ xx 东西在渲染器中工作 (tele3.cz/jbar/rest/rest.html)... 不知道 32 :(
    • 根据文档,您可以将以下格式传递给 unicode 指令:[十进制数字或十六进制数字,前缀为 0x、x、\x、U+、u 或 \u 或作为 XML -style 十六进制字符实体,例如ᨫ]。也许您可以尝试使用不同的 nbsp 表示法,根据 Wikipedia 是 [U+00A0 不间断空格(HTML:   )。可以被 UTF-8 编码为 0xC2 0xA0。]
    • 我又试了一次,这似乎确实有效。您可以将:trim: 添加到指令中以使其忽略替换周围的空格。如果你用修剪更新答案,赏金就是你的 - 谢谢!
    • 很高兴与您做生意:)
    【解决方案2】:

    您也可以使用|_| 代替|nbsp|,因为reStructuredText 的目标是作为纯文本可读。

    【讨论】:

    • @Davide 并最终被“显示更多 cmets”标签隐藏
    【解决方案3】:

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

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

    【讨论】:

    • 一个不可见的字符没有用
    • 然后您可以配置您的编辑器使其可见或在您的输入文件中使用额外的预处理过程...
    • 通常,您不是唯一编辑该文件的人,其他人可能使用不同的编辑器,甚至使用相同编辑器的人也很可能使用不同的配置...跨度>
    【解决方案4】:

    我最终想出了一个解决 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 的:

    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
    

    它不是很漂亮,甚至不能让你逃脱 ~ 字符,但它适用于我的目的。

    【讨论】:

      【解决方案5】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-17
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        相关资源
        最近更新 更多