EMACS-DOCUMENT

=============>随便,谢谢

从Emacs拷贝格式化的org-mode内容到其他应用程序中

我用org-mode写了很多东西,我想如果可以从org文件中复制文本,然后带格式地粘贴到其他应用程序中(例如Word、Gmail等)那就太好了。 好奇心战胜了我,我也想知道其他应用程序是如何做到这一点的。 它的工作原理是创建一个富文本格式版本的内容,然后把它放在剪贴板上。 然而仅仅复制它是不够的,它需要以RTF数据类型的身份进入剪贴板。在Mac OSX上,我使用pbcopy实现了这一点。

看看这篇文章的实战视频:https://www.youtube.com/watch?v=irkmQnggVpE

在org-mode中实现这一点的一个简单策略是通过导出生成HTML,然后使用工具(如textutil)将其转换为RTF。比如这样。

(defun formatted-copy ()
  "Export region to HTML, and copy it to the clipboard."
  (interactive)
  (save-window-excursion
    (let* ((buf (org-export-to-buffer 'html "*Formatted Copy*" nil nil t t))
           (html (with-current-buffer buf (buffer-string))))
      (with-current-buffer buf
        (shell-command-on-region
         (point-min)
         (point-max)
         "textutil -stdin -format html -convert rtf -stdout | pbcopy"))
      (kill-buffer buf))))

(global-set-key (kbd "H-w") 'formatted-copy)

这种方法除了方程和图像,其他的都没问题。引用也还有待改进,如何改进是一个挑战。

让我们在一些文本上试试这种方法。文本包括一些 粗体, 斜体,下划线,打钩和 原样 文本复制。 还包括一些公式的例子:H_{2}O电离形成H^{+}。我们还得有一个等式:(e^{iπ} + 1 = 0)。 我们还应该有单个引用 kitchin-2015-examp 和多个引用 kitchen-2016-autom-data,kitchen-2015-data-surfac-scien 的情况.

再加上一个代码块:

import pycse.orgmode as org
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 60, 500)
plt.figure(figsize=(4, 2))
plt.plot(np.exp(-0.1 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh x) 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh np.cos(x),
np.exp(-0.1 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh x) 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh np.sin(x))
org.figure(plt.savefig('spiral.png'),
caption='A spiral.',
attributes=[['org', ':width 100']])
print('')
org.table([['H1', 'H2'], None, [1, 2], [2, 4]],
caption='A simple table')
print('')
org.result(6 0_sync_master.sh 1_add_new_article_manual.sh 1_add_new_article_newspaper.sh 2_start_translating.sh 3_continue_the_work.sh 4_finish.sh 5_pause.sh auto_translate.sh base.sh parse_url_by_manual.sh parse_url_by_newspaper.py parse_url_by_newspaper.sh project.cfg reformat.sh texput.log urls_checker.sh youdao.sh 7)

spiral.png 图1:一个螺旋。

一个表:

一个简单的表

H1 H2
1 2
2 4
42

总之,这种从导出的HTML生成RTF的简单方法非常适合这些简单标记的应用场景。在获取图表、获取交叉引用、标题、适当引用等方面的改进则需要更复杂的导出方法,而且可能需要直接导出成RTF格式。又是一个巨大的挑战!