在 org 模式下,如果我想将文本格式化为等宽逐字,即~...~
,如果它在引号内:~"..."~
,则它没有被格式化(保持原样)。
另外,引号是保留符号,如果是,它们是什么意思?(它们似乎不会影响生成的 HTML / 内部 Emacs 显示)。
在这种情况下,罪魁祸首是 中的正则表达式,负责确定是否要逐字设置文档中的字符序列。 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)
to更改为'(" \t('{" "- \t.,:!?;')}\\" " \t\r\n,'" "." 1)
并重新编译 org,然后重新启动 emacs。
这是defcustom
8.0 版本之前的版本,现在已经不是了,因此您必须忍受这种手动修改。
问候,汤姆
最后,我从http://comments.gmane.org/gmane.emacs.orgmode/82571找到了解决方案
根据该线程,逐字的正则表达式是从 variable 构建的org-emphasis-regexp-components
,它定义了在强调之前、之后、边界处或主体中的合法字符;而 verbatim 是 org 模式下的重点环境之一。
该线程给出的可行设置:
(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
我遇到了类似的问题,感谢@chaiko 的基本解决方案。但是,@chaiko 的解决方案仅适用于 org-mode 的字体化,它不会影响org-export
. 要获得正确的导出文档,您需要对 org-mode 的解析器进行更多额外的修改(org-element--set-regexps)
。
所以完整的代码片段应该是这样的:
(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 。
对于在 Emacs org-mode 中具有一些不良影响的少量字符(因为是元字符),查看org-mode ( org-entities.el )中的特殊符号可能会有所帮助。
因此,例如"
可以由\quot{}
(其中最后的大括号对不是强制性的,但如果后面没有空格则需要)编码。
所以="..."=
你会写=\quot{}...\quot{}=
.
那是更多的打字,看起来很丑陋。但是对于后一种 org-mode 有一个解决方案:C-c C-x \
您可以切换这些符号的显示魔法。如果魔法是激活的,那么直接在输入\quot{}
resp之后。将显示\quot{}
一个。"
此外,这个符号列表可以很容易地扩展,fe
(add-to-list 'org-entities
'("backslash" "\\textbackslash" nil "\\" "\\" "\\" "\\"))
:
尽管如此,除了上述解决方案以及在开头用 a 转义整行之外,我还是严重错过了在 org 模式下更容易转义。
=verbatim=
如果在所有情况下都将=
' 之间的文本保持不变,我会很高兴。不是,但是。就像我们从每一种精心设计的标记/向下语言中知道的那样。=this
*bold*
text=
=this *bold* text=
但是,当然,这最好放在 org-mode 开发页面上。理想情况下有一个合适的补丁...... :-)