如何逃避双重报价?

5 emacs markup org-mode

在组织模式中,如果我想逐字格式化文本,即~...~,如果它在引号内:~"..."~,则不进行格式化(保持原样).

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

Tom*_*ner 7

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

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

引号和双引号内逐字字符被明确禁止=~通过

[^ 
\n,\"']\|[^ 
\n,\"']
Run Code Online (Sandbox Code Playgroud)

我发现可以追溯到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的.

这是defcustom8.0发布之前的版本,现在已经不存在了,所以你必须忍受这个手动修改.

问候,汤姆