为什么在转换后包含下划线 (_) 或插入符号 (^) 的URL不起作用?

这个问题的发生是因为标记解析器将URL的一部分(即链接目标)理解为有效的文本格式标记。大多数轻量级标记语言都有这个问题,因为它们不使用基于语法的解析器。AsciiDoc语言计划在未来更谨慎地处理URL(参见[Asciidoctor issue #281^]Asciidoctor issue #61https://github.com/asciidoctor/asciidoctor/issues/61)。值得庆幸的是,有许多方法可以通过AsciiDoc传递机制包含任意复杂度的URL。

Example 1. 解决方案A

获取链接行为的最简单方法是将其分配给一个属性。

= 文件标题
:link-with-underscores: https://asciidoctor.org/now_this__link_works.html

这个URL有重复的下划线 {link-with-underscores}。

AsciiDoc处理器在链接分配给属性时不会断开含有下划线的链接,因为内联格式化标记是在属性之前被替换的。在对文档的其余部分进行格式化(加粗、强调、等宽字体等)时,URL保持隐藏。

Example 2. 方案B

另一种解决格式问题的方法是显式指定你希望对一段文本应用的格式。这可以通过使用内联通过宏来完成。如果你想显示一个URL,并保持原样,将它放在通过宏内,并启用宏替换,这是进行链接替换的东西。

这个URL有重复的下划线传递:宏[https://asciidoctor.org/now_this__link_works.html]。

pass宏会从文档中移除URL,对URL应用`宏`的替换,然后在整个文档的替换完成后,将处理过的URL恢复到其原来的位置。

或者,你可以使用双加号内联宏++)仅包围URL。然而,当你使用这种方法时,AsciiDoc处理器将不再把它识别为URL,所以你必须使用明确的`link`前缀。

这个URL有重复的下划线链接:https://asciidoctor.org/now_this__link_works.html。

要了解更多信息,请查看[Asciidoctor问题#625^](https://github.com/asciidoctor/asciidoctor/issues/625)。