如何逃避双重报价?

时间:2013-05-08 14:31:57

标签: emacs markup org-mode

在组织模式下,如果我想将文字格式化为等宽字体,即~...~,如果它在引号内:~"..."~,则不会格式化(保持原样)。

另外,引用保留符号,如果是,它们是什么意思? (它们似乎不会影响生成的HTML /内部Emacs显示。)

4 个答案:

答案 0 :(得分:7)

在这种情况下,罪魁祸首是 org-emph-re org-verbatim-re中的正则表达式,负责确定文档中的字符序列是否要逐字设置。

  

org-verbatim-re是`org.el'中定义的变量。   它的价值在于   “\([('\”{] \ | ^ \)\(\([=〜] \)\([^
  \ N,\“'] \ | [^
  \ N,\“'] \。?(?:吗?\ n \)\ {0,1 \} [^
  \ n,\“'] \)\ 3 \)\([ - 。,:!?;'\”)} \] \ | $ \)“

引号和双引号在

的逐字符=~中被明确禁止
[^ 
\n,\"']\|[^ 
\n,\"']

我发现3年后的讨论得出的结论是你必须修改这个正则表达式并将变量org-emph-re / org-verbatim-re设置为符合你的emacs设置中的愿望(也许文件局部变量也可以工作)。您可以通过从排除字符类和外部匹配中排除双引号进行试验,如

中所示
  

“\([('{] \ | ^ \)\(\([* / _ =〜+] \)\([^
  \ N,'] \ | [^
  \ N,'] \?(?:吗?\ n \)\ {0,1 \} [^
  \ n,'] \)\ 3 \)\([ - 。,:!?;')} \] \ | $ \)“

但是看着那个正则表达式,天堂知道复杂文件会发生什么 - 你必须尝试......

编辑:碰巧,如果我将以下内容评估为区域,=内的引号会正确导出,但没有其他内容:-),当我有更多内容时,我会进一步调查时间。

  

(setq org-emph-re“\([('{] \ | ^ \)\(\([* / _ =〜+] \)\([^   \ N,'] \ | [^   \ n'] \(:??\ n.?\)\{0,1\}[^   \ n,'] \)\ 3 \)\([ - 。,:!?;')}] \ | $ \)“)

编辑2::直接更改org.el让它发挥作用:

(defvar org-emphasis-regexp-components后面的行从'(" \t('\"{" "- \t.,:!?;'\")}\\" " \t\r\n,\"'" "." 1)更改为'(" \t('{" "- \t.,:!?;')}\\" " \t\r\n,'" "." 1)并重新编译组织,然后重新启动emacs。

这是8.0发布之前的defcustom,现在已经不存在了,所以你必须忍受这种手动修改。

的问候, 汤姆

答案 1 :(得分:2)

最后,我找到了http://comments.gmane.org/gmane.emacs.orgmode/82571

的解决方案

根据该主题,逐字的正则表达式是由变量org-emphasis-regexp-components构建的,它定义了重点之前,之后,边界或重要部分的合法字符;和逐字是org模式中的重点环境之一。

该线程给出的可行设置:

(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))

答案 2 :(得分:2)

我遇到了类似的问题,并感谢@chaiko提供了一个基本的解决方案。但是,@ chaiko的解决方案仅适用于org-mode的fontification,它不会影响org-export。要获得正确的导出文档,您需要通过(org-element--set-regexps)对org-mode的解析器进行更多额外的破解。

所以完整的代码片段应该是这样的:

(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n\r")
(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
(org-element--set-regexps)

我已将此集成到我的oh-my-emacs项目中:https://github.com/xiaohanyu/oh-my-emacs/blob/e82fce10d47f7256df6d39e32ca288d0ec97a764/core/ome-org.org#code-block-fontification

答案 3 :(得分:1)

对于在Emacs org-mode中有一些不良影响的少量字符(因为是元字符),在org-mode(special symbols)中查看org-entities.el可能会有所帮助。

因此,例如"可以由\quot{}编码(其中末尾的大括号对不是强制性的,但如果后面没有空格则需要)。

因此,="..."=代替=\quot{}...\quot{}=

这是一些打字更多,看起来很难看。但是对于后一种组织模式有一个解决方案:通过C-c C-x \,您可以为这些符号切换显示魔术。如果魔术是活跃的,那么在输入\quot{} resp后直接。 \quot{}将显示"

此外,这个符号列表可以很容易地扩展,例如。

(add-to-list 'org-entities
'("backslash" "\\textbackslash" nil "\\" "\\" "\\" "\\"))

尽管如此,除了上面的解决方案之外,我还很容易错过在org-mode中更容易的转义,除了在:处开始整行之外。

如果=verbatim=在所有情况下都会使=之间的文字保持不变,我会很高兴。不是=this *bold* text=,而是=this *bold* text=。就像我们从每个精心设计的标记/下载语言中知道的那样。

但是,当然,这可以更好地放在组织模式开发页面上。理想情况下,贴合贴片......: - )