如何在org-mode中转义斜杠?

15
foo /bar/ baz为例,导出为HTML后,它变成了foo <i>bar</i> baz。现在我想按照原来的样式导出foo /bar/ baz ,该如何实现?我尝试过使用foo \/bar\/ baz,但输出结果变成了foo \/bar\/ baz
我知道这是一个简单的问题,我已经搜索了很多,但只找到了这个:Escape pipe-character in org-mode,答案说斜杠转义可以正常工作,但对我来说似乎不行。
编辑:
在搜索org mode邮件列表后,我发现了这里的讨论和解决方案:http://thread.gmane.org/gmane.emacs.orgmode/50743 有两种方法可以做到这一点:
1.设置选项#+OPTIONS: *:nil关闭所有着重符号
2.修改变量org-emphasis-alist,删除相关内容
对于我来说,第一种解决方案是可接受的,而且也比较简单。

11
我感激人们给出的答案,但它们只是说明orgmode确实需要一个合适的转义机制。我在使用orgmode时遇到过许多这样的标记语言情况,这些情况并不总是可以通过类似于这样的解决方法解决。 - Ken Williams
例如,换行符会中断对 /斜体/的处理,所以据我所知,如果我想要斜体,就必须将整个段落放在一行上。 - Ken Williams
4个回答

7
在空格和斜杠之间插入一个零宽空格(U+200B;在Emacs中使用Ctrl-x 8 RET 200B RET插入),这样做可以使内容更加易读。
org-mode文本
What do we see?
- /foo/
-/foo/

在第二个 "foo" 行的第一个正斜杠之前插入一个零宽空格(不可见,因为它的宽度为零),在导出后产生以下 HTML:
<div id="content">
<h1 class="title">What do we see?</h1>

<ul>
<li><i>foo</i>
</li>
<li>​/foo/
</li>
</ul>

</div>

零宽度空格也被导出了,在<li>/foo/之间产生了一个零宽度空格符,这是预期的效果。

1
如果您可以容忍斜杠之间有一个空格,foo / bar / bas将导出为文字斜杠。或者,您可以使用=foo /bar/ baz=使整个字符串成为verbatim。
我怀疑这两个选项都不完全符合您的要求,但它们很容易实现,可能已经足够好了。
编辑:如果您需要URL的斜杠,应该使用orgmode链接语法,例如[[http://foo/bar.baz]]

嗨@lsta,感谢你的回答,你是对的,你提到的两个不是我想要的。由于斜杠是URI的一部分,例如href="/blog/post1/",因此在这种情况下,额外的空格和逐字字符串是不合适的。 - Kelvin Hu
嗨@KelvinHu,我已经编辑了答案以回答URL问题。 - Ista
嗨 @lsta,实际上它不是一个完整的URL,像 http://example.com/blog/post1/,它只是一个URI,像 /blog/post1/,所以我不能使用链接语法。不过,还是谢谢你的回答,我已经找到了解决这个问题的方法,请看我问题的“编辑”部分。 - Kelvin Hu

1

为了完整起见,我将我的答案在此重新发布...

您还可以将相关文本格式化为verbatimcode

代码和verbatim字符串中的文本不会被处理为Org模式特定的语法; 它会逐字导出。

因此,您可以尝试类似于=foo | bar=(代码)或foo ~|~ bar(verbatim)的内容。但它确实会改变输出格式。


0
在编程中,如果想要转义某个字符,可以在该字符前后加上一个零宽空格(\u200B)即可实现。我写了一个函数,可以在这两个空格之间插入任意字符。
(defun org-insert-literal-character (c)
  "Insert a literal character at point."
  (interactive "cWhat character?")
  (insert ?\u200B c ?\u200B))

(define-key org-mode-map (kbd "C-c i l") 'org-insert-literal-character)

给定一个强调的句子:

准备插入斜杠

将光标移动到要插入字符的位置,然后按“C-c i l”和“/”键:

插入斜杠

此外,这是一个使用此功能生成的org html网站的示例:

带有强调斜杠的网站


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接