大家好,我想问一下:
如果在进行文字强调等处理时,如果也将星号、斜杠等这些字符进行加粗等操作,该如何处理?
比如,在加粗时,使用*bold*
,如果我也想将星号 *
进行加粗,该如何处理?其他同理。
什么,反斜杠\转义不是基本操作吗
**test** **\*\*test\*\***
*test* *\*test\**
注意这是md语法,org自行替换
实测使用反斜杠转义, 输出html后任然会出现反斜杠:
e.g. *\*yes\**
原文 会转换成 \*yes\*
。
对的。使用反斜杠得不到想要的结果。
反斜杠不会消失,会被一起加粗。
实在不行就只能用macro将就一下了
#+MACRO: bold @@html:<b>$1</b>@@
用法{{{bold(*yes*)}}}
斜体的照葫芦画瓢,一样的
牛x , 我想学习一下关于org里的这一块 ,请问看哪一章内容。
刚才查了下教程,是 “Exporting”->“Macro replacement” 里面的。
之前通读过一遍教程,但彼时不太熟悉,现在也隔了一段时间了,很多都忘了。不过仍有太多不会的了。
我看了一下手册,发现说明很少,大部分介绍内置的这种macro的用法,没有讲解怎么写这种macro。
于是乎我参照 你们给的这个实例链接看了一下 这个实例链接 算是大概学会了如何写一个macro了,但是对以下现象有疑问:
-
macro中的
@
是具体是什么意思?我的想法是这个一个条件界定符号,例如例子中的
#+MACRO: color @@html:<span style="color: $1">$2</span>@@@@latex:\textcolor{$1}{$2}@@@@odt:<text:span text:style-name="$1">$2</text:span>@@
我猜想它的意义在这里是这样的:
IF 输出是html文档
那么xxx
ELSEIF 输出是latex文档
那么xxx
ELSEIF 输出是odt文档
那么xxx
END
- 是否只能把macro写在一行,可以像编程一样多行编辑吗?因为有的macro会很长。
-
你可以简单的把
@@
理解为内联文本.@@html: something@@
就等价于内联的#+HTML: something
具体可以内联什么, 你直接查阅Org Manual就可以了 (Tips: 使用@@
作为搜索关键字) -
多行宏原生不支持, 但是你也不能自己写一个定义宏的宏,如果你像这样的话:
#+MACRO: ml-macro (eval (concat "#+MACRO: " "$1" "$2"))
{{{ml-macro(bold,
@@html:<b>$1</b>@@
It's bold now!)}}}
{{{bold(test_bold)}}}
因为org宏展开的时候会先查找所有宏的 #+MACRO
定义是否存在, 如果他找不到, 直接就给你报错了, 比如这里的会提示找不到bold
宏. StackOverflow上倒是有一个比较取巧的答案.
注: StackOverflow上的代码有bug, 我删掉mapcar的第三个参数就解决了
* Setup :noexport:
#+begin_src elisp :exports results :results silent
(setq my-macros
(mapcar
(lambda (x)
(string-match "\\*\\* \\([^\n]+\\)\n\\(.*\\)" x)
(cons (match-string 1 x)
(substring x (match-beginning 2))))
(org-element-map (org-element-parse-buffer) 'headline
(lambda (x)
(and (= (org-element-property :level x) 2)
(string=
(org-element-property
:raw-value
(org-element-property :parent x)) "Macros")
(buffer-substring-no-properties
(org-element-property :begin x)
(org-element-property :end x)))))))
(defadvice org-macro--collect-macros (around add-macros activate)
(let ((r ad-do-it))
(setq ad-return-value
(append my-macros r))))
#+end_src
* Macros
** foobar
line 1 of macro
line 2 of macro
** bar
line 1 of macro
用这种比较取巧的方式进行定义. 看你自己的接受程度如何了.
感谢大佬提示 ,关于org的api,org-element-map
我还看不明白具体怎么运用,我翻手册学习一下。