In org mode, if I want to format text a monospace verbatim, i.e. ~...~
, if it is inside quotes: ~\"...\"~
, it is not formatted (left as is).
For small amounts of characters which have some unwanted effect in Emacs org-mode (because being metacharacters) it may be helpful to have a look at special symbols in org-mode (org-entities.el).
So for example "
can be encoded by \quot{}
(where the braces pair at the end is not mandatory, but needed if no whitespace follows).
So instead ="..."=
you would write =\quot{}...\quot{}=
.
That is some typing more and looks pretty ugly. But for the latter org-mode has a solution: by C-c C-x \
you can toggle a display magic for those symbols. If the magic is active, so directly after typing \quot{}
resp. \quot{}
a "
will be displayed.
Besides, this symbols list can easily be extended, f.e.
(add-to-list 'org-entities
'("backslash" "\\textbackslash" nil "\\" "\\" "\\" "\\"))
Nevertheless I am heavily missing easier escaping in org-mode, besides the above solution and besides escaping a whole line by a :
at its beginning.
I'd be happy if =verbatim=
in all cases would leave the text between the =
's unchanged. Not =this
*bold*
text=
, but =this *bold* text=
. Like we know that from each well-designed markup/-down language.
But, of course, this is better placed at the org-mode development pages. Ideally with a fitting patch... :-)
Finally, I found a solution from http://comments.gmane.org/gmane.emacs.orgmode/82571
According to that thread, the regexp for verbatim is built from variable org-emphasis-regexp-components
, which defines legal characters before, after, at the border of, or in the body of emphasis; and verbatim is one of the emphasis environment in org mode.
A workable setting given by that thread:
(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n,")
(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
I've met similar problem, and thanks @chaiko for a basic solution. However, @chaiko's solution only work for org-mode's fontification, it doesn't affect org-export
. To get correct exported document, you need to do some more extra hack to org-mode's parser by (org-element--set-regexps)
.
So the full code snippets should be something like:
(setcar (nthcdr 2 org-emphasis-regexp-components) " \t\n\r")
(custom-set-variables `(org-emphasis-alist ',org-emphasis-alist))
(org-element--set-regexps)
I've integrated this to my oh-my-emacs project: https://github.com/xiaohanyu/oh-my-emacs/blob/e82fce10d47f7256df6d39e32ca288d0ec97a764/core/ome-org.org#code-block-fontification .
The culprit in this case is the regular expression in org-emph-re
org-verbatim-re
, responsible for determining if a sequence of characters in the document is to be set verbatim or not.
org-verbatim-re is a variable defined in `org.el'. Its value is "\([ ('\"{]\|^\)\(\([=~]\)\([^
\n,\"']\|[^
\n,\"'].?\(?:\n.?\)\{0,1\}[^
\n,\"']\)\3\)\([- .,:!?;'\")}\]\|$\)"
quotes and double quotes are explicitly forbidden inside verbatim characters =~
by
[^
\n,\"']\|[^
\n,\"']
I found discussions dating back 3 years comming to the conclusion that you have to tinker with this regular expression and set the variable org-emph-re
/org-verbatim-re
to something that matches your wishes in your emacs setup (maybe a file local variable works as well). You can experiment by excluding double quotes from the excluding character classes and outside matches as in
"\([ ('{]\|^\)\(\([*/_=~+]\)\([^
\n,']\|[^
\n,'].?\(?:\n.?\)\{0,1\}[^
\n,']\)\3\)\([- .,:!?;')}\]\|$\)"
but looking at that regex, heaven knows what happens to complex documents -- you have to try...
Edit: as it happens, if I evalute the following as region, quotes inside =
are exported correctly, but nothing else is :-), I investigate further when I have more time.
(setq org-emph-re "\([ ('{]\|^\)\(\([*/_=~+]\)\([^ \n,']\|[^ \n,'].?\(?:\n.?\)\{0,1\}[^ \n,']\)\3\)\([- .,:!?;')}]\|$\)")
Edit 2:: Got it to work by changing org.el
directly:
Change the line following (defvar org-emphasis-regexp-components
from '(" \t('\"{" "- \t.,:!?;'\")}\\" " \t\r\n,\"'" "." 1)
to '(" \t('{" "- \t.,:!?;')}\\" " \t\r\n,'" "." 1)
and recompile org then restart emacs.
This was a defcustom
prior to the 8.0 release, it isn't anymore, so you have to live with this manual modification.
regards, Tom