【问题标题】:Is there an equivalent of Org-mode's b_ignoreheading for non-beamer documents?对于非投影仪文档,是否有等效于 Org-mode 的 b_ignoreheading ?
【发布时间】:2012-04-24 09:27:29
【问题描述】:

当使用组织模式创建beamer presentation 时,可以设置标题的property,这样导出的标题不显示,只显示其内容。比如下面的

#+title: Test

#+options: toc:nil
#+latex_class: beamer
#+startup: beamer

#+BEAMER_FRAME_LEVEL: 2

* Ignored heading                                           :B_ignoreheading:
:PROPERTIES:
:BEAMER_env: ignoreheading
:END:
Text

生成一个只有“文本”且没有标题的框架。这种功能是否可用于非投影仪文档?也就是说,是否可以告诉 Org-mode 不导出标题而只导出其内容?例如,是否可以让 Org-mode 导出以下内容

#+title: Test

* Ignored heading
Text

不导出标题“忽略的标题”而只导出“文本”?

如果我导出

#+title: Test

* 
Text

(注意*之后的空格)到LaTeX我得到以下(我只包括了相关部分):

\section{}

Text

但这不是我想要的。我希望在导出中完全忽略标题,以便获得以下信息(同样我只包括相关部分):

Text

【问题讨论】:

  • 这不是您想要的答案,但您应该能够只使用标题星号和空格,以便标题没有标题,例如* 。我不确定如何让它导出并忽略默认选项的标题。这可能需要一些 lisp hacking。
  • @cm2 请注意,我希望完全忽略标题,例如我不希望 LaTeX 导出包含空白标题,例如 \section{}* 方法导致)。
  • 啊,我明白了。我建议通过包含您希望看到的 LaTeX 输出类型来编辑问题。
  • 您应该能够使用ox-extra.el contrib 包来执行此操作——这在“导出期间忽略标题”部分中的here 中进行了讨论。

标签: emacs org-mode


【解决方案1】:

对于您所要求的内容没有默认支持。但是你可以使用 一个预处理钩子以获得类似的输出。下面是一个 LaTeX 导出示例:

;; backend aware export preprocess hook
(defun sa-org-export-preprocess-hook ()
  "My backend aware export preprocess hook."
  (save-excursion
    (when (eq org-export-current-backend 'latex)
      ;; ignoreheading tag for bibliographies and appendices
      (let* ((tag "ignoreheading"))
        (org-map-entries (lambda ()
                           (delete-region (point-at-bol) (point-at-eol)))
                         (concat ":" tag ":"))))))

(add-hook 'org-export-preprocess-hook 'sa-org-export-preprocess-hook)

这是我的 org-mode 设置中的 sn-p。你可以在上面看到原文 github。 上面的代码会忽略带有ignoreheading标签的标题,例如

* Heading 1
* Heading 2                           :ignoreheading:
+ Some text
+ an item

导出为:

\section{Heading 1}
\label{sec-1}

\begin{itemize}
\item Some text
\item an item
\end{itemize}

警告:此解决方案存在一个已知问题。它 当您在第一个标题上尝试此操作时不起作用。我不 明白为什么会这样,希望有一天我有时间 调查。

需要注意的解决方法:上述限制可以是 通过在 org 之后使用这样的行来规避 LaTeX 导出 文件头:

\include{preamble.tex}

preamble.tex 文件可以包含摘要等部分或 致谢。但是您应该注意,这会使您的 org 文件非常 与导出后端密切相关。这将变得不平凡 例如,将相同的 org 文件导出为 HTML。

注意:对于使用新导出框架(Org 8.0 或更高版本),请使用以下内容:

(defun sa-ignore-headline (contents backend info)
  "Ignore headlines with tag `ignoreheading'."
  (when (and (org-export-derived-backend-p backend 'latex 'html 'ascii)
          (string-match "\\`.*ignoreheading.*\n"
                (downcase contents)))
    (replace-match "" nil nil contents)))

(add-to-list 'org-export-filter-headline-functions 'sa-ignore-headline)

【讨论】:

  • 当我在 Org-mode 7.6 中尝试此操作时,标题 其内容将被忽略。我只想忽略标题,而不是其内容。
  • 好吧,这对我来说已经工作了一年多,所以我会说本地有问题(另外,我在发布之前进行了测试)。如果您可以提供更多信息,这可能有助于解决问题。但 SO 可能不是一个合适的地方。我建议你在邮件列表上发帖,我可以在那里跟进。
  • 我用emacs -q 试过了,但都不管用。我使用 Emacs 23.3.1。
  • 有一个已知问题:当您在第一个标题上使用上述解决方案时,它不起作用。除此之外我找不到任何问题。我也很难复制您的设置,所以我无法进一步测试。我再次敦促您在邮件列表上发帖。
  • 正是您提到的问题阻止了它为我工作。我使用您在帖子中包含的示例进行尝试。我认为您应该编辑您的帖子并注意避免其他人也感到困惑。这个问题有可能克服吗?
【解决方案2】:

现在您可以使用ox-extra 轻松完成此操作。将以下内容添加到您的 init 文件中:

(require 'ox-extra)
(ox-extras-activate '(ignore-headlines))

那么任何带有ignore标签的标题都将被忽略,而其内容仍将被导出。

【讨论】:

【解决方案3】:

我在 Debian Jessie 上为 Emacs 24.4.1 和 Org-mode 8.2.10 找到了一个简单的解决方案,它在处理之前删除了标记的标题,因此它也删除了它们的结构节点,而不仅仅是文本。

;; ignore_heading tag in Org mode, based on the manual and func docs
(defun ignored-headlines-removal (backend)
  "Remove all headlines with tag ignore_heading in the current buffer.
     BACKEND is the export back-end being used, as a symbol."
  (org-map-entries
   (lambda () (delete-region (point) (progn (forward-line) (point))))
   "ignore_heading"))

(add-hook 'org-export-before-parsing-hook 'ignored-headlines-removal)

我没有让它特定于导出后端,因为它不需要。我还使用了ignore_heading 标记来确保投影仪导出中的ignoreheading 标记保留其功能。

这是我发现它的方法:

  1. 我查看了组织手册中Advanced confuguration 部分的钩子文档。它包含一个忽略所有标题的钩子示例,这几乎是我需要的,但我必须找到一种方法来仅删除带有 ignore_heading 标签的标题。
  2. 我查看了org-map-entries 函数的文档(通过在Emacs 中输入C-h f org-map-entries RET),发现它的可选第二个参数MATCH 是一个议程样式的匹配字符串,也可以匹配标签。李>

这次经历再次向我展示了 Emacs 确实是一个可扩展的自文档编辑器。 RTFM FTW!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多