2

在从 org-mode 创建的 html 中,如果指定为,您可以在新选项卡中打开链接

#+ATTR_HTML: target="_blank" 
[[http://cnn.com][CNN]]

我在这里找到的。

[[http://cnn.com][CNN]]但是,如果是项目符号项,这将不起作用。例如,

#+ATTR_HTML: target="_blank" 
- [[http://cnn.com][CNN]]

或者

- #+ATTR_HTML: target="_blank" 
  [[http://cnn.com][CNN]]

1)我怎样才能使它工作,2)我可以通过在顶部指定某种形式的这个选项(可能是一些参数#+OPTIONS:)来为特定页面上的所有链接设置这个html属性吗?

4

3 回答 3

2

简短回答:替换函数中的字符串org-export-attach-captions-and-attributes

diff -u -L /home/eab/.emacs.d/el-get/org-mode/lisp/org-exp.el -L \#\<buffer\ el-get/org-exp.el\> /home/eab/.emacs.d/el-get/org-mode/lisp/org-exp.el /tmp/buffer-content-8644Ge2
--- /home/eab/.emacs.d/el-get/org-mode/lisp/org-exp.el
+++ #<buffer el-get/org-exp.el>
@@ -1935,7 +1935,7 @@
            "\\|"
            "^[ \t]*\\(|[^-]\\)"
            "\\|"
-           "^[ \t]*\\[\\[.*\\]\\][ \t]*$"))
+           "^.*\\[\\[.*\\]\\][ \t]*$"))
    cap shortn attr label end)
     (while (re-search-forward re nil t)
       (cond

关于麻烦的长评论。让我们看看函数的源代码,它解析#+ATTR_BACKEND成文本属性。

(defun org-export-attach-captions-and-attributes (target-alist)
  "Move #+CAPTION, #+ATTR_BACKEND, and #+LABEL text into text properties.
If the next thing following is a table, add the text properties to the first
table line.  If it is a link, add it to the line containing the link."
  (goto-char (point-min))
  (remove-text-properties (point-min) (point-max)
              '(org-caption nil org-attributes nil))
  (let ((case-fold-search t)
    (re (concat "^[ \t]*#\\+caption:[ \t]+\\(.*\\)"
            "\\|"
            "^[ \t]*#\\+attr_" (symbol-name org-export-current-backend) ":[ \t]+\\(.*\\)"
            "\\|"
            "^[ \t]*#\\+label:[ \t]+\\(.*\\)"
            "\\|"
            "^[ \t]*\\(|[^-]\\)"
            "\\|"
            "^[ \t]*\\[\\[.*\\]\\][ \t]*$"))
...)))

org-export-current-backendHTML这种情况下。它适用于此类文本

#+ATTR_HTML: target="_blank" 
[[http://cnn.com][CNN]]

像这样:

#+ATTR_HTML: target="_blank"1)通过正则表达式解析整行"^[ \t]*#\\+attr_"...

[[http://cnn.com][CNN]]2)通过正则表达式解析整行"^[ \t]*\\[\\[.*\\]\\][ \t]*$"

#+ATTR_HTML: target="_blank"3)在导出到html之前删除字符串

4) 设置target="_blank"线的属性[[http://cnn.com][CNN]]

然后 org-mode 准备使用此属性导出的 html 链接。

如果我替换字符串"^[ \t]*\\[\\[.*\\]\\][ \t]*$""^.*\\[\\[.*\\]\\][ \t]*$"那么这个补丁函数适用于

#+ATTR_HTML: target="_blank" 
  - [[http://cnn.com][CNN]]

也。但是list有问题

  - [[http://cnn.com][CNN]] 
  - [[http://cnn.com][CNN]]
  - some text

如果我ATTR_HTML在每个链接之前

#+ATTR_HTML: target="_blank" 
  - [[http://cnn.com][CNN]] 
#+ATTR_HTML: target="_blank" 
  - [[http://cnn.com][CNN]]
  - some text

然后我得到这样的输出html

* CNN

* CNN
* some text

列表中有一个额外的空白。所以,我不能得到这样的输出

* CNN
* CNN
* some text

只要

* CNN

* CNN

* some text

这个例子展示了 org-mode 在某些情况下并不灵活。我可以编写 lisp 函数,它为导出文本中的所有链接设置此 html 属性,并将此功能添加到#+OPTIONS:或其他内容中。但是我不能以这种方式使越来越多的 org-mode 导出系统复杂化,因为存在一些 org-mode 语法限制 - 它很简单。

如果我有这样的 org-publish 问题,我想:除了 org-mode 之外,我可能需要其他东西来化妆吗?)

于 2013-01-09T11:51:18.413 回答
2

我发现添加了以下作品:

#+HTML_HEAD: <base target="_blank">
于 2021-06-15T23:02:15.207 回答
1

如果您有几个链接,您可以将 html 包含到您的模板中,如下所示

My projects
- @@html:<a href="https://example.com" target="_blank">Example</a>@@
于 2021-03-04T11:23:26.437 回答