제목없이 하위 트리의 내용을 내보낼 수 있습니까?


28

조직 모드로 문서를 작성하고 필요에 따라 LaTeX, HTML 등으로 내 보냅니다. :no_export:출력에 특정 하위 트리가 표시되지 않도록 할 때마다 태그를 자주 사용합니다 .

내가 원하는 것은 내보내기가 특정 하위 트리 제목 을 완전히 무시 하지만 해당 제목 아래의 하위 트리 내용 을 무시 하지 않는 것 입니다. 다시 말해, 특정 하위 트리는 자체 하위 트리가 아닌 컨텐츠가 단지 부모의 연속 인 것처럼 내 보내야합니다.

이상적으로 같은 태그를 상상하고 :no_title:있습니다. 내 조직 모드 개요가 내가 익숙한 방식으로 다소 보이기를 원합니다. 그러나 비슷한 결과를 가진 다른 접근법을 고려할 것입니다.

예를 들어, 다음은 org-mode로 작성된 문서의 MWE입니다.

* Chapter 1
** Section 1
*** Paragraph 1      :no_title:
First paragraph of text in the section.
*** Paragraph 2      :no_title:
Second paragraph of text in the section.
* Chapter 2
** Section 1
*** Subsection 1
**** Paragraph 1      :no_title:
First paragraph of text in the subsection.
**** Paragraph 2      :no_title:
Second paragraph of text in the subsection

현재 내 보내면 다음과 같은 결과가 나타납니다.

1 장 1

1.1 섹션 1

1.1.1 단락 1 : no_title :

섹션에서 텍스트의 첫 번째 단락.

1.1.2 단락 2 : no_title :

섹션의 텍스트의 두 번째 단락.

2 장

2.1 섹션 1

2.1.1 제 1 관

◊ 2.1.1.1 단락 1 : no_title :

하위 섹션에서 텍스트의 첫 번째 단락.

그러나 내가 원하는 것은 다음과 같습니다.

1 장 1

1.1 섹션 1

섹션에서 텍스트의 첫 번째 단락.

섹션의 텍스트의 두 번째 단락.

2 장

2.1 섹션 1

2.1.1 제 1 관

하위 섹션에서 텍스트의 첫 번째 단락.

답변:


27

이것은 목표 달성을 위해 선호하는 방법 일 수 있습니다 (단순함으로 인해). 다른 답변의 의견에 묻힌 것 같습니다.

  1. .emacs파일에 다음을 추가 하십시오.

    (require 'ox-extra)
    (ox-extras-activate '(ignore-headlines))
    
  2. ignore무시하고 싶은 헤드 라인에 태그를 사용하십시오 (내용을 무시하지는 않음).

참고 : ELPA를 사용하여 org-mode를 설치하는 경우 org-mode 저장소를 ELPA 리포지토리 목록에 추가해야합니다. 자세한 내용은 여기 를 참조하십시오. 이 작업이 끝나면 패키지 목록 ( M-x package-refresh-contents)을 새로 고치고 패키지를 설치하십시오 org-plus-contrib(예 :) M-x package-install. 오래된 조직 모드 설치를 제거하는 것을 잊지 마십시오.


2
이것이 정답입니다.
rasmus

나는 그것이 효과가 없을지라도 대답으로 받아 들였다. org-extra.el을로드하려고했지만 다른 기능이 여전히 누락되었습니다 (Org 8.2.4에 붙어 있습니다).
Brian Z

ox-extra 패키지를 찾을 수 없습니다 ...
Toothrot

1
@Toothrot contrib/lisp폴더에 있습니다 -orgmode.org/cgit.cgi/org-mode.git/tree/contrib/lisp/ox-extra.el 참조 -emacs 설정 파일에 다음과 같은 줄을 추가해야 할 수도 있습니다 (add-to-list 'load-path "/path/to/contrib/lisp").
Mark

이것은 조직 8.3+의 단어에만 해당됩니다. 또한 8.3 이상의 의존성을 가진 ox-extra.el을 잡을 수는 없습니다. 필요한 파일을 찾을 수 없다는 내보내기 오류가 발생합니다.
Dodgie

16

, 이것은 전적으로 가능합니다. init 파일에 다음 코드를 추가하십시오.

(defun org-remove-headlines (backend)
  "Remove headlines with :no_title: tag."
  (org-map-entries (lambda () (delete-region (point-at-bol) (point-at-eol)))
                   "no_title"))

(add-hook 'org-export-before-processing-hook #'org-remove-headlines)

감사의 말

이 질문은 이전에 StackOverflow 에서 요청 되었습니다 (다른 초점과 표현으로, 여기에 게시하기 전에 인터넷을 검색했을 때 찾을 수 없었던 것 같습니다). 위의 코드는 허용 된 답변 에있는 코드의 단순화 된 버전입니다 . 8.0에 도입 된 새로운 수출 업체 에서 작동하며 백엔드에 구애받지 않습니다 .org-mode

최신 정보

주석에서 논의한 바와 같이, 위의 코드 는 태그가 지정된 항목이 내 보낸 문서에서 제외되기 전에 태그가 지정된 항목의 내용이 :no_title:사라지게 합니다 . 예를 들어 다음 문서를 내 보내면 제목과 목차는 있지만 내용은없는 문서가 생성됩니다.

#+EXCLUDE_TAGS: no_export

* No export                          :no_export:
  This is not meant for you to see.
* No title                           :no_title:
  You should see this.

그 이유는 즉 org-mode없앱 헤드 라인 태그 :no_title:는 제거하기 전에 항목 누구의 헤드 라인 태그됩니다 :no_export:. 결과적으로 no_export항목 을 제거 할 때 항목의 내용을 no_title이전 no_export항목에 속하는 것으로 처리합니다 . 원래 항목의 내용을 더 이상 분리하는 구조적 요소 (제목)가 없기 때문에 이는 완벽하게 이해됩니다.

이 문제를 해결하기 위해 no_export항목 삭제에 대한 책임을 (으)로 이전 할 수 있습니다 org-remove-headlines. 이런 식으로 no_export헤드 라인이 no_title항목 에서 제거되기 전에 모든 항목이 사라 졌는지 확인 합니다.

(defun org-remove-headlines (backend)
  "Remove headlines with :no_title: tag."
  (org-map-entries (lambda () (let ((beg (point)))
                                (outline-next-visible-heading 1)
                                (backward-char)
                                (delete-region beg (point))))
                   "no_export" tree)
  (org-map-entries (lambda () (delete-region (point-at-bol) (point-at-eol)))
                   "no_title"))

(add-hook 'org-export-before-processing-hook #'org-remove-headlines)

나는 이것을 많이 사용 했으므로 감사합니다! 그러나 문제가 있음을 발견했습니다. 제목이 태그 된 no_export제목이 태그가있는 제목 바로 앞에 오면 no_title두 번째 제목의 내용도 내 보내지 않습니다.
Brian Z

@BrianZ 천만에요! no_exportno_title제목 형제 자매가 있습니까 (즉, 동일한 수의 주요 별이 있습니까)? 그렇지 않은 경우 두 제목 중 어떤 별이 더 있습니까?
itsjeyd

그들은 형제입니다. 이 장난감 예제를 내 보내면 내용이 전혀 없습니다 (제목, 목차 등) pastebin.com/KaiK9qJm
Brian Z

1
@BrianZ 그 자체 org-remove-headlines로 기능 일뿐입니다. 어디에서나 전화하지 않으면 도움이되지 않습니다. 그렇습니다 (add-hook 'org-export-before-processing-hook #'org-remove-headlines). 올바른 동작을 위해서는 라인 을 평가해야합니다 . 나는 아마도 원래의 답변을 편집 할 때 그것에 대해 분명히 언급했을 것입니다. 당신이보고있는 경고에 관해서는 : 나는 바닐라 이맥스 24.4 및 조직 모드 버전 8.2.10이있는 것을 얻지 못했습니다. 경고를 없애기 (require 'org-agenda)위해 add-hook회선을 평가 하기 전에 시도해 볼 수 있습니다.
itsjeyd

2
이 기능은 조직 구성으로도 구현됩니다. 참조 : orgmode.org/cgit.cgi/org-mode.git/plain/contrib/lisp/…
rudolfo.christ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.