我正在使用优秀的Org Capture Extension Firefox插件将我的网络链接直接捕获到我的Emacs文档中。
最小组织捕获模板是:
(setq org-capture-templates `(
("L" "Protocol Link" entry (file+headline "~/web.org" "Links")
"* [[%:link][%:description]]\n")
;; ... your other templates
))
我用它来为文章添加书签,特别是很多文章都在上面 arxiv.org。问题是arxiv标题页包含[]字符,例如:
[1606.04838]大规模机器学习的优化方法
与模板中使用的[[%:link][%:description]]
很好地混合以创建组织模式链接。例如,捕获返回:
** [[https://arxiv.org/abs/1606.04838][[1606.04838] Optimization Methods for Large-Scale Machine Learning]]
由于" [1606.04838]" 字符串中的括号,组织模式链接已损坏。
如何解决这个问题?
答案 0 :(得分:2)
解决方法是将链接[%:description]
描述转换为不包含方括号[]的字符串。为此,我们可以定义一个函数,将[,]字符转换为(,)1。
(defun transform-square-brackets-to-round-ones(string-to-transform)
"Transforms [ into ( and ] into ), other chars left unchanged."
(concat
(mapcar #'(lambda (c) (if (equal c ?[) ?\( (if (equal c ?]) ?\) c))) string-to-transform))
)
然后我们可以将此功能用于org-capture-template
。 %(sexp) syntax用于将lisp代码评估到模板中:
%(sexp)评估Elisp sexp并替换为结果。 为方便起见,%:keyword(见下文)占位符 表达式中的内容将在此之前展开。 sexp必须返回一个字符串。
修改后的org-capture-template
是:
(setq org-capture-templates '(
("L" "Protocol Link" entry (file+headline "~/web.org" "Links")
"* [[%:link][%(transform-square-brackets-to-round-ones \"%:description\")]]\n")
;; ... your other templates
))
然后,当您单击Firefox Org-Capture按钮时,模板已正确扩展到
** (1606.04838) Optimization Methods for Large-Scale Machine Learning
具有格式良好的组织模式链接(请注意[1606.04838]已变为(1606.04838))