5

在 org 模式下,如果我想将文本格式化为等宽逐字,即~...~,如果它在引号内:~"..."~,则它没有被格式化(保持原样)。

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

4

4 回答 4

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)to更改为'(" \t('{" "- \t.,:!?;')}\\" " \t\r\n,'" "." 1)并重新编译 org,然后重新启动 emacs。

这是defcustom8.0 版本之前的版本,现在已经不是了,因此您必须忍受这种手动修改。

问候,汤姆

于 2013-05-09T08:11:48.943 回答
2

最后,我从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))
于 2014-05-12T02:11:17.643 回答
2

我遇到了类似的问题,感谢@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 。

于 2015-06-18T09:45:38.323 回答
2

对于在 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 开发页面上。理想情况下有一个合适的补丁...... :-)

于 2015-07-03T13:14:02.203 回答