【问题标题】:Org-mode strike-through on DONE headings when exporting to LaTeX导出到 LaTeX 时,DONE 标题上的组织模式删除线
【发布时间】:2013-09-21 15:36:21
【问题描述】:

当我将文档导出到 LaTeX 时,让 Emacs 中的 org-mode 在每个带有“DONE”关键字的标题上添加删除线的最佳方法是什么?现在我的设置是

(defun my-latex-filter-headline-done (text backend info)
  "Ensure dots in headlines."
  (when (org-export-derived-backend-p backend 'latex)
    (save-match-data
      (when (let ((case-fold-search t))
              (string-match "\\\\\\([a-z]+\\){\\(.*DONE.*\\)}"
                            text))
        (if (not (string-match ".*hsout.*" text))
            (replace-match "\\\\\\1{\\\\hsout{\\2}}"
                       t nil text))))))

(eval-after-load 'ox
  '(progn
     (add-to-list 'org-export-filter-headline-functions
                  'my-latex-filter-headline-done)))

在我的文档中我有

#+LATEX_HEADER: \DeclareRobustCommand{\hsout}[1]{\texorpdfstring{\sout{#1}}{#1}}

所以如果我有一个像这样的组织文档

* DONE test

它将导出到类似的东西

% header stuff…
\begin{document}
\section{\hsout{{\bfseries\sffamily DONE} test}}
\end{document}

虽然通常没有删除线,但它就像

% header stuff…
\begin{document}
\section{{\bfseries\sffamily DONE} test}
\end{document}

我必须使用\hsout 宏来使标题中的删除线起作用。这种方法有几个缺点:

  • 这取决于 org-mode 生成 LaTeX 代码的方式。如果 org-mode 改变了它这样做的方式,这种方法可能会失败。
  • 我必须在我的所有文档中添加LATEX_HEADER
  • 某些标题具有简短格式 (\section[aaaa]{bbbbbbb})。如果我想包含它,我必须在我的 elisp 中添加另一个丑陋的正则表达式,这已经很丑陋了。

因此我一开始的问题。谁知道更好的方法?

【问题讨论】:

  • 这是一个非常有趣的问题。您是否可以添加一个 LaTeX 代码示例,说明您希望导出在 LaTeX 文档中看起来像成品,以便该线程的读者清楚地了解 之前 和想要的之后?在我看来,我设想导出可能会调​​用 LaTeX 模板并在 \begin{document} 之后插入导出。
  • 嗨@lawlist,我添加了一些你描述的例子。至于模板,反正我也找不到改的。我知道我可以更改预览乳胶片段的模板,但不确定导出的文档。
  • 看起来ox-latex.el 有一个硬编码的特定模板。如果您喜欢 ox-latex.el 将组织标题转换为 \section 定义的方式(例如,在第 190 行作为 org-latex-classes 的一部分),那么您可能仅限于该定义中允许的格式类型自然。除了修改源之外,另一种选择是在ox-latex.el 完成编译后运行一个清理函数——例如,replace-regexp。 . ..

标签: emacs latex org-mode


【解决方案1】:

这里是部分 . . .这将为您保存LATEX-HEADER 的每个组织文件中的条目:

(setq org-latex-default-packages-alist
  '(("AUTO" "inputenc"  t)
    ("T1"   "fontenc"   t)
    (""     "fixltx2e"  nil)
    (""     "graphicx"  t)
    (""     "longtable" nil)
    (""     "float"     nil)
    (""     "wrapfig"   nil)
    (""     "rotating"  nil)
    ("normalem" "ulem"  t)
    (""     "amsmath"   t)
    (""     "textcomp"  t)
    (""     "marvosym"  t)
    (""     "wasysym"   t)
    (""     "amssymb"   t)
    (""     "hyperref"  nil)
    "\\tolerance=1000"
    "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}"
  ))

另一种选择是使用:

(setq org-latex-packages-alist
  '(
    "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}"
  ))

添加到alist的其他方法:

(add-to-list 'org-latex-packages-alist
  "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}")

(add-to-list 'org-latex-default-packages-alist
  "\\DeclareRobustCommand{\\hsout}[1]{\\texorpdfstring{\\sout{#1}}{#1}}")

【讨论】:

  • 有趣。我不知道我可以将任意宏放入该变量中。谢谢~~
猜你喜欢
  • 2012-01-21
  • 2012-10-22
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多