用于组织模式导出的自定义突出显示的替换正则表达式查询
replace-regexp query for custom highlighting for org-mode export
我正在尝试关注 this 博客 post 并将用户定义的文本标记添加到我的组织文件中,以便在我的 html 和 latex-pdf 导出中突出显示。
- 博客 post 包含一个正则表达式示例(我引用了它),但是 他们的(至少对我而言)不起作用 对于下面详述的任何示例案例都是正确的,所以 我正在尝试自己编写,但我需要一些帮助。
- (他们的博客逻辑改编为使用我的高亮符号(
@
)和乳胶输出(\hl{}
)我相信如下:)
(let ((text (replace-regexp-in-string "[^\w]\(@\)[^\n\t\r]+\(@\)[^\w]" "\\hl{" text nil nil 1 nil)))
(replace-regexp-in-string "[^\w]\(\\hl{\)[^\n\t\r]+\(@\)[^\w]" "}" text nil nil 2 nil)))
(在 org-mode 中)我将要突出显示的文本包含在 @
符号中,并为乳胶突出显示进行以下转换。
- 1st @ -> \hl{
- 第二个@ -> }
4 个输入的预期输出:
- @highlight me@ -> \hl{highlight me}
- Bill@highlight me@ -> Bill\hl{highlight me}
- @highlight me@Bob -> \hl{highlight me}Bob
- @highlight me@ 和@highlight me@ -> \hl{highlight me} 和 \hl{highlight me}
我的组织模式代码块用于测试 4 个案例的正则表达式逻辑:
#+begin_src emacs-lisp :tangle yes
; 4 regex cases to convert
(setq mylist '("@highlight me@" "Bill@highlight me@" "@highlight me@Bob" "@highlight me@ and @highlight me@"))
(defun highlight-attempt (text)
"replace @text@ with \hl{text}"
(let ((text (replace-regexp-in-string "[^\w]\(@\)" "}" text nil nil 1 nil)))
(replace-regexp-in-string "\(^@\)[^\w]" "\\hl{" text nil nil 1 nil)))
(mapcar 'highlight-attempt mylist)
#+end_src
以上4个输入的当前输出:
- @highlight me@ -> \hl{highlight me}
- (符合预期)
- Bill@highlight me@ -> Bill}highlight me}
- (不符合预期)
- @highlight me@Bob -> \hl{highlight me}Bob
- (符合预期)
- @highlight me@ and @highlight me@ -> \hl{highlight me} and }highlight me}
- (不符合预期)
博客使用了不正确的正则表达式,参考elisp regexps。
即 [^\w]
表示任何不是文字 \
或 w
的东西 - \w
在 [...]
中并不特殊。 elisp 中的替代项是 \W
和 [^[:word:]]
。我会使用另一种方法,只将文本保留在外部 '@'
之间
(replace-regexp-in-string
"@\([^@]+\)@"
;; keep the inner text (match is '\1' in replacement)
"\\hl{\1}"
text)
我正在尝试关注 this 博客 post 并将用户定义的文本标记添加到我的组织文件中,以便在我的 html 和 latex-pdf 导出中突出显示。
- 博客 post 包含一个正则表达式示例(我引用了它),但是 他们的(至少对我而言)不起作用 对于下面详述的任何示例案例都是正确的,所以 我正在尝试自己编写,但我需要一些帮助。
- (他们的博客逻辑改编为使用我的高亮符号(
@
)和乳胶输出(\hl{}
)我相信如下:)
- (他们的博客逻辑改编为使用我的高亮符号(
(let ((text (replace-regexp-in-string "[^\w]\(@\)[^\n\t\r]+\(@\)[^\w]" "\\hl{" text nil nil 1 nil)))
(replace-regexp-in-string "[^\w]\(\\hl{\)[^\n\t\r]+\(@\)[^\w]" "}" text nil nil 2 nil)))
(在 org-mode 中)我将要突出显示的文本包含在 @
符号中,并为乳胶突出显示进行以下转换。
- 1st @ -> \hl{
- 第二个@ -> }
4 个输入的预期输出:
- @highlight me@ -> \hl{highlight me}
- Bill@highlight me@ -> Bill\hl{highlight me}
- @highlight me@Bob -> \hl{highlight me}Bob
- @highlight me@ 和@highlight me@ -> \hl{highlight me} 和 \hl{highlight me}
我的组织模式代码块用于测试 4 个案例的正则表达式逻辑:
#+begin_src emacs-lisp :tangle yes
; 4 regex cases to convert
(setq mylist '("@highlight me@" "Bill@highlight me@" "@highlight me@Bob" "@highlight me@ and @highlight me@"))
(defun highlight-attempt (text)
"replace @text@ with \hl{text}"
(let ((text (replace-regexp-in-string "[^\w]\(@\)" "}" text nil nil 1 nil)))
(replace-regexp-in-string "\(^@\)[^\w]" "\\hl{" text nil nil 1 nil)))
(mapcar 'highlight-attempt mylist)
#+end_src
以上4个输入的当前输出:
- @highlight me@ -> \hl{highlight me}
- (符合预期)
- Bill@highlight me@ -> Bill}highlight me}
- (不符合预期)
- @highlight me@Bob -> \hl{highlight me}Bob
- (符合预期)
- @highlight me@ and @highlight me@ -> \hl{highlight me} and }highlight me}
- (不符合预期)
博客使用了不正确的正则表达式,参考elisp regexps。
即 [^\w]
表示任何不是文字 \
或 w
的东西 - \w
在 [...]
中并不特殊。 elisp 中的替代项是 \W
和 [^[:word:]]
。我会使用另一种方法,只将文本保留在外部 '@'
(replace-regexp-in-string
"@\([^@]+\)@"
;; keep the inner text (match is '\1' in replacement)
"\\hl{\1}"
text)