星号、斜杠等特殊字符的加粗、斜体等操作疑问

大家好,我想问一下:
如果在进行文字强调等处理时,如果也将星号、斜杠等这些字符进行加粗等操作,该如何处理?
比如,在加粗时,使用*bold*,如果我也想将星号 *进行加粗,该如何处理?其他同理。

什么,反斜杠\转义不是基本操作吗

**test** **\*\*test\*\***

*test* *\*test\**

注意这是md语法,org自行替换

实测使用反斜杠转义, 输出html后任然会出现反斜杠:

e.g. *\*yes\** 原文 会转换成 \*yes\*

1 个赞

对的。使用反斜杠得不到想要的结果。:sob:
反斜杠不会消失,会被一起加粗。

实在不行就只能用macro将就一下了

#+MACRO: bold @@html:<b>$1</b>@@

用法{{{bold(*yes*)}}} 斜体的照葫芦画瓢,一样的

牛x :smile_cat: , 我想学习一下关于org里的这一块 ,请问看哪一章内容。

刚才查了下教程,是 “Exporting”->“Macro replacement” 里面的。
之前通读过一遍教程,但彼时不太熟悉,现在也隔了一段时间了,很多都忘了。不过仍有太多不会的了。

看一下 Org-manual里的Macro Replacement一节 粗略了解一下

再看 这个 的一些实例就可以了. Org Macro很简单的.

1 个赞

感谢 @Shwen_Y@cireu 提示:

我看了一下手册,发现说明很少,大部分介绍内置的这种macro的用法,没有讲解怎么写这种macro。

于是乎我参照 你们给的这个实例链接看了一下 这个实例链接 算是大概学会了如何写一个macro了,但是对以下现象有疑问:

  1. 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   
  1. 是否只能把macro写在一行,可以像编程一样多行编辑吗?因为有的macro会很长。
  1. 你可以简单的把@@理解为内联文本. @@html: something@@就等价于内联的#+HTML: something 具体可以内联什么, 你直接查阅Org Manual就可以了 (Tips: 使用@@作为搜索关键字)

  2. 多行宏原生不支持, 但是你也不能自己写一个定义宏的宏,如果你像这样的话:

#+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

用这种比较取巧的方式进行定义. 看你自己的接受程度如何了.

感谢大佬提示 :smiley: ,关于org的api,org-element-map 我还看不明白具体怎么运用,我翻手册学习一下。