除了 URL 之外的任何地方都可以使用易碎的斜杠

breakable slashes everywhere but URLs

我使用 python sphinx (1.4.6) 从重组文本生成 pdf (latex)。

我使用窄 table 列 headers 和 "stuff/misc/other" 这样的文本。我需要斜线是易碎的,所以 table headers 不会溢出到下一列。

LaTeX 解决方案是在必要时使用 \BreakableSlash\slash 。我可以使用 python 代码来替换所有斜杠:

from sphinx.util.texescape import tex_replacements

# \BreakableSlash needs package hyphenat to be loaded
tex_replacements.append((u'/', ur'\BreakableSlash ') ) 
# tex_replacements.append((u'/', ur'\slash ') ) 

但这会将 http://www.example.com/ 之类的任何 URL 分解为

http:\unhbox\voidb@x\penalty\@M\hskip\z@skip/\discretionary{-}{}{}\penalty\@M\hskip\z@skip\unhbox\voidb@x\penalty\@M\hskip\z@skip/\discretionary{-}{}{}\penalty\@M\hskip\z@skipwww.example.com

http:/\penalty\exhyphenpenalty/\penalty\exhyphenpenaltywww.example.com

我想使用在这两种情况下都适用的通用解决方案,其中文档的编辑者仍然可以使用普通的 ReST,而不必担心乳胶。

知道如何在 URL 中获得经典斜线,在其他地方获得易碎斜线吗?

你没有真正给出数据和源代码,只是问一个想法,所以我冒昧地只用伪代码勾勒出一个解决方案:

  • 使用 .split()
  • 在 space 的每个位置将文档拆分为字符串列表
  • 对于每个字符串,通过将其左侧与 http://(也可能是 ftp://、https:// 或类似标签)进行比较来检查它是否是 URL
  • 进行替换,但仅限于不是 URLs
  • 的字符串
  • 使用 " ".join(my_list)
  • 等命令重新组合所有字符串,包括 spaces

一种方法可能是编写一个 Transform subclass。然后在 setup(app) 中使用 add transform 以在每次读取时使用它。

我可以使用 DefaultSubstitutions from transforms.py 作为我自己 class 的模板。