如何在Markdown与Sphinx RST文档中防止词汇内部的字符换行拆分?
如何在Markdown与Sphinx RST文档中防止词汇内部的字符换行拆分?
我来给你分享几个标准且被广泛接受的方案,完美适配Markdown和Sphinx RST场景,解决像C++这类词汇被换行拆分的问题,而且完全避开你提到的非-breaking空格/连字符方案:
Markdown 方案
你之前用的<nobr>确实是废弃的HTML标签,不推荐使用。取而代之的是标准的内联CSS样式,这是通用且符合规范的做法:
- 直接给需要禁止换行的文本包裹一个带样式的
<span>标签:
这种方式几乎所有Markdown渲染器都支持,而且是W3C推荐的标准写法,不会出现兼容性问题。<span style="white-space: nowrap;">C++</span>
Sphinx RST 方案
RST对原生HTML的支持比较严格,直接写<nobr>会被当成纯文本显示,这里有两种优雅的解决方式:
方式一:自定义可复用的nowrap角色
这是我个人最推荐的方式,一次定义就能全局复用:
- 在你的RST文档开头(或者Sphinx项目的全局rst配置文件里)定义一个自定义角色:
.. role:: nowrap :class: nowrap - 然后在你的Sphinx项目的自定义CSS文件(通常是
_static/custom.css)中添加样式:.nowrap { white-space: nowrap; } - 之后在文档里直接使用这个角色包裹需要禁止换行的文本即可:
:nowrap:`C++`
方式二:使用raw指令嵌入标准HTML
如果不想额外配置CSS,也可以直接用RST的raw指令来嵌入合规的HTML:
.. raw:: html <span style="white-space: nowrap;">C++</span>
这种方式不需要额外的CSS配置,适合临时或者小型项目使用。
另外,如果你需要频繁使用C++这类词汇,还可以结合RST的替换机制,定义一个全局替换:
.. |C++| replace:: :nowrap:`C++`
之后在文档里只要写|C++|,就会自动渲染成不换行的版本,非常方便。
备注:内容来源于stack exchange,提问作者William Seligman




