You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Markdown与Sphinx RST文档中防止词汇内部的字符换行拆分?

如何在Markdown与Sphinx RST文档中防止词汇内部的字符换行拆分?

我来给你分享几个标准且被广泛接受的方案,完美适配Markdown和Sphinx RST场景,解决像C++这类词汇被换行拆分的问题,而且完全避开你提到的非-breaking空格/连字符方案:

Markdown 方案

你之前用的<nobr>确实是废弃的HTML标签,不推荐使用。取而代之的是标准的内联CSS样式,这是通用且符合规范的做法:

  • 直接给需要禁止换行的文本包裹一个带样式的<span>标签:
    <span style="white-space: nowrap;">C++</span>
    
    这种方式几乎所有Markdown渲染器都支持,而且是W3C推荐的标准写法,不会出现兼容性问题。

Sphinx RST 方案

RST对原生HTML的支持比较严格,直接写<nobr>会被当成纯文本显示,这里有两种优雅的解决方式:

方式一:自定义可复用的nowrap角色

这是我个人最推荐的方式,一次定义就能全局复用:

  1. 在你的RST文档开头(或者Sphinx项目的全局rst配置文件里)定义一个自定义角色:
    .. role:: nowrap
       :class: nowrap
    
  2. 然后在你的Sphinx项目的自定义CSS文件(通常是_static/custom.css)中添加样式:
    .nowrap {
        white-space: nowrap;
    }
    
  3. 之后在文档里直接使用这个角色包裹需要禁止换行的文本即可:
    :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

火山引擎 最新活动