Định dạng giấy HTML với chế độ Org


11

Mặc định của chế độ Org trong quá trình xuất HTML là đặt tác giả vào phần bưu chính ở cuối trang.

Nhưng tôi muốn xuất một tài liệu giống như tài liệu với tác giả giữa tiêu đề và tóm tắt. Có thể bằng cách nào đó để đặt tác giả sau tiêu đề?

Và có thể gắn nhãn trừu tượng là một trừu tượng? Tôi đã sử dụng các dấu phân cách

#+BEGIN_abstract
...
#+END_abstract

để đánh dấu văn bản là abstact nhưng nó được hiển thị như một đoạn bình thường (không có blockquote như thụt lề). Có thể có được thụt lề đúng cho trừu tượng và nhãn địa phương?


2
Đối với các yêu cầu trừu tượng sử dụng css. ...sẽ được bọc như <div class="abstract"><p>...</p></div>. Để có một tiêu đề như LaTeX, có lẽ bạn nên điền vào một báo cáo lỗi. Hiện tại, hãy sử dụng macro {{{AUTHOR}}}và đoạn trích @@html:whatever@@để xây dựng những gì bạn muốn.
rasmus

Câu trả lời:


10

Có thể một cái gì đó như thế này (được thử nghiệm với LaTeX và HTML)

#+TITLE: An Orged Paper
#+AUTHOR: Rasmus
#+DATE: A Dark Day for Science 

#+RESULTS: html-header

#+begin_abstract
#+begin_center
{{{html-only(*Abstract*)}}}
#+end_center
my long abstract that is longer than one line. my long abstract that is longer than one line.
#+end_abstract
#+toc: headlines
* Introduction
Please read my paper!
* Data
~{0,1}~
* Conclusion
Something deep and profound

{{{html-only(------------)}}}
* styles                                                           :noexport:
#+HTML_HEAD_EXTRA: <style type="text/css">
#+HTML_HEAD_EXTRA: <!--
#+HTML_HEAD_EXTRA:   .header_title {font-size: 2em; font-weight: bold;}
#+HTML_HEAD_EXTRA:   .header_author {font-size: 1.5em; font-weight: bold;text-align:center;}
#+HTML_HEAD_EXTRA:   .header_date {text-align:center;}
#+HTML_HEAD_EXTRA:   .header_date .timestamp {font-size:1em; color:#000000;}
#+HTML_HEAD_EXTRA:   .abstract {max-width: 30em; margin-left: auto; margin-right: auto;}
#+HTML_HEAD_EXTRA: -->
#+HTML_HEAD_EXTRA: </style>

#+OPTIONS: toc:nil

#+MACRO: html-only (eval (if (org-export-derived-backend-p org-export-current-backend 'html) "$1" ""))

#+NAME: html-header
#+BEGIN_SRC emacs-lisp :results raw :exports (if (org-export-derived-backend-p org-export-current-backend 'html) "results" "none")
  "#+begin_header
  ,#+begin_header_author
  {{{AUTHOR}}}
  ,#+end_header_author
  ,#+begin_header_date
  {{{DATE}}}
  ,#+end_header_date
  ,#+end_header
"
#+END_SRC

Lưu ý html-headercũng có thể được tạo ra thông qua org-html-preamble. Cũng lưu ý rằng từ org 8.3 org-latex-title-commandcó thể được sử dụng để tùy chỉnh tiêu đề dưới dạng chuỗi định dạng.


2

Hãy xem mã nguồn, có vẻ như không có tùy chọn để làm điều này.

Tôi không chắc chắn những gì bạn thực sự muốn, chỉ cung cấp hai cách có thể:

  1. Chỉ cần thêm một #+BEGIN_HTML ... #+END_HTMLkhối để viết những gì bạn muốn. (Nội dung được viết trong đó sẽ được coi là hoàn toàn HTML.) Nhưng bạn có thể cần thêm #+OPTIONS: toc: nilđể tắt TOC hoặc tác giả sẽ được đặt dưới TOC.

  2. Xác định lại chức năng xuất và thực hiện những gì bạn muốn (Dòng thông báo 50 ~ 52), chỉ cần đặt mã sau (require 'ox-html)vào trong tệp cấu hình của bạn:

      (defun org-html-template (contents info)
        "Return complete document string after HTML conversion.
      CONTENTS is the transcoded contents string.  INFO is a plist
      holding export options."
        (concat
         (when (and (not (org-html-html5-p info)) (org-html-xhtml-p info))
           (let ((decl (or (and (stringp org-html-xml-declaration)
                  org-html-xml-declaration)
                 (cdr (assoc (plist-get info :html-extension)
                     org-html-xml-declaration))
                 (cdr (assoc "html" org-html-xml-declaration))
    
                 "")))
             (when (not (or (eq nil decl) (string= "" decl)))
         (format "%s\n"
             (format decl
                 (or (and org-html-coding-system
                      (fboundp 'coding-system-get)
                      (coding-system-get org-html-coding-system 'mime-charset))
                     "iso-8859-1"))))))
         (org-html-doctype info)
         "\n"
         (concat "<html"
           (when (org-html-xhtml-p info)
             (format
              " xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"%s\" xml:lang=\"%s\""
              (plist-get info :language) (plist-get info :language)))
           ">\n")
         "<head>\n"
         (org-html--build-meta-info info)
         (org-html--build-head info)
         (org-html--build-mathjax-config info)
         "</head>\n"
         "<body>\n"
         (let ((link-up (org-trim (plist-get info :html-link-up)))
         (link-home (org-trim (plist-get info :html-link-home))))
           (unless (and (string= link-up "") (string= link-home ""))
             (format org-html-home/up-format
               (or link-up link-home)
               (or link-home link-up))))
         ;; Preamble.
         (org-html--build-pre/postamble 'preamble info)
         ;; Document contents.
         (format "<%s id=\"%s\">\n"
           (nth 1 (assq 'content org-html-divs))
           (nth 2 (assq 'content org-html-divs)))
         ;; Document title.
         (let ((title (plist-get info :title)))
           (format "<h1 class=\"title\">%s</h1>\n" (org-export-data (or title "") info)))
         ;; Author
         (let ((author (plist-get info :author)))
           (format "<h2 class=\"author\">%s</h2>\n" (org-export-data (or author "") info)))
         contents
         (format "</%s>\n"
           (nth 1 (assq 'content org-html-divs)))
         ;; Postamble.
         (org-html--build-pre/postamble 'postamble info)
         ;; Closing document.
         "</body>\n</html>"))        
    

3
Đây hoàn toàn là cách sai để làm điều này !! Tốt hơn là, bạn cần tạo một bản sao lưu có nguồn gốc, xem org-export-define-derived-backendvà thêm mẫu mới vào :translate-alist. Đối với các ví dụ cụ thể kiểm tra ox-beamer.el, ox-koma-script.elvà ví dụ ox-s5.el.
rasmus

1

Vấn đề khó khăn nhất mà tôi gặp phải là vấn đề này là kiểu dáng có điều kiện của các phần khác nhau và đánh số có điều kiện của các phần khác nhau. Đây là một giải pháp cho cả hai vấn đề này.

Đây là bài viết của tôi:

#+TITLE: Complex Tracking of Awesome Things
#+AUTHOR: Bastibe
#+INCLUDE: style.org

* Abstract
:PROPERTIES:
:NUMBERS: no
:HTML_CONTAINER_CLASS: abstract
:END:

Lorem ipsum dolor sit amet...

* Introduction
:PROPERTIES:
:NUMBERS: no
:END:

* Methodology

* Results

* Conclusion

* Acknowledgements
:PROPERTIES:
:NUMBERS:  no
:END:

Đầu tiên, điều này bao gồm một tệp org với một số tùy chọn bổ sung. Tệp này, được gọi style.orgở trên đặt xuất HTML để tải biểu định kiểu tùy chỉnh và đặt một vài tùy chọn LaTeX. Nếu bạn không xuất sang LaTeX, bạn sẽ không cần những thứ đó.

#+LANGUAGE: en
#+OPTIONS: tags:nil html-postamble:nil # toc:nil
#+STARTUP: nofold hideblocks
#+BIND: org-latex-title-command ""

#+HTML_MATHJAX: path:"MathJax/MathJax.js"
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="style.css" />

#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [a4paper, 12pt]
#+LATEX_HEADER: \usepackage{setspace}
#+LATEX_HEADER: \onehalfspacing
#+LATEX_HEADER: \usepackage{fontspec}
#+LATEX_HEADER: \setmainfont{Cambria}
#+LATEX_HEADER: \setmonofont{PragmataPro}
#+LATEX_HEADER: \usepackage{polyglossia}
#+LATEX_HEADER: \setdefaultlanguage{english}
#+LATEX_HEADER: \usepackage[a4paper, scale=0.8]{geometry}
#+LATEX_HEADER: \usepackage{amsmath}
#+LATEX_HEADER: \usepackage{units}
#+LATEX_HEADER: \usepackage{titling}
#+LATEX_HEADER: \usepackage{listings}
#+LATEX_HEADER: \lstset{basicstyle=\ttfamily\footnotesize,showstringspaces=false}
#+LATEX_HEADER: \usepackage[hang]{caption}

Để hiển thị tệp này dưới dạng HTML giống như giấy, một ít CSS là đủ (được lưu trong style.css:

#content {
    max-width: 80ex;
    position: relative;
    margin: 5px auto;
    font-family: Cambria;
    text-align: justify;
    -moz-hyphens: auto;
}

.abstract {
    max-width: 65ex;
    margin: 5px auto;
    margin-top: 4em;
    margin-bottom: 4em;
    content: none;
}

p {
    text-indent: 5ex;
    margin-bottom: 0;
    margin-top: 0;
}

Tuy nhiên, số phần sẽ sai. Chế độ Org có thể đánh số tất cả các phần, hoặc không có. Giấy tờ thường cần số trên các phần cơ thể, nhưng không phải là Tóm tắt và Tóm tắt. Đoạn mã sau đây sẽ khiến Org đặt số trước các phần thông thường, nhưng triệt tiêu các số nếu thuộc tính :NUMBERS: nođược đặt:

(defun headline-numbering-filter (data backend info)
  "No numbering in headlines that have a property :numbers: no"
  (let* ((beg (next-property-change 0 data))
         (headline (if beg (get-text-property beg :parent data))))
    (if (string= (org-element-property :NUMBERS headline) "no")
        (cond ((eq backend 'latex)
               (replace-regexp-in-string
                "\\(part\\|chapter\\|\\(?:sub\\)*section\\|\\(?:sub\\)?paragraph\\)"
                "\\1*" data nil nil 1))
              ((eq backend 'html)
               (replace-regexp-in-string
                "\\(<h[1-6]\\)\\([^>]*>\\)"
                "\\1 class=\"nonumber\"\\2" data nil nil)))
      data)))

(setq org-export-filter-headline-functions '(headline-numbering-filter))

Điều này hoạt động tốt cho xuất LaTeX, nhưng không xuất trong HTML. Với CSS hiện đại, các trình duyệt có thể thực hiện đánh số cho bạn (được thêm vào style.css):

/* do not show section numbers */
span.section-number-2 { display: none; }
span.section-number-3 { display: none; }
span.section-number-4 { display: none; }
span.section-number-5 { display: none; }
span.section-number-6 { display: none; }

/* use LaTeX-style names for the counters */
h1 { counter-reset: section; }
h2 { counter-reset: subsection; }
h3 { counter-reset: subsubsection; }
h4 { counter-reset: paragraph; }
h5 { counter-reset: subparagraph; }

.nonumber::before { content: none; }

h2::before {
    content: counter(section) " ";
    counter-increment: section;
}

h3::before {
    content: counter(section) "." counter(subsection) " ";
    counter-increment: subsection;
}

h4::before {
    content: counter(section) "." counter(subsection) "." counter(subsubsection) " ";
    counter-increment: subsubsection;
}

h5::before {
    content: counter(section) "." counter(subsection) "." counter(subsubsection) "." counter(paragraph) " ";
    counter-increment: paragraph;
}

h6::before {
    content: counter(section) "." counter(subsection) "." counter(subsubsection) "." counter(paragraph) "." counter(subparagraph) " ";
    counter-increment: subparagraph;
}

Cùng với đó, bạn có thể xuất giấy của mình sang cả LaTeX và HTML.


" Chế độ Org có thể đánh số tất cả các phần hoặc không ." Uhm, làm thế nào về việc chuyển tài sản UNNUMBERED: tđến một tiêu đề? Từ ORG-TIN TỨC: Tiêu đề, mà tài sản UNNUMBEREDkhông phải là con số không, hiện được xuất mà không có số phần bất kể cấp độ của chúng. Tài sản được thừa kế bởi trẻ em.
rasmus

@rasmus thật tuyệt vời! Tuy nhiên, theo như tôi có thể nói, điều này chỉ được giới thiệu ở chế độ org 8.3, chưa được phát hành.
bastibe

Nó được thực hiện trong tổng thể và hoạt động trên tất cả các phụ trợ. Org 8.3 đang ở ngưỡng cửa. Rằng nó chưa được phát hành có nghĩa là thời điểm hoàn hảo để kiểm tra và đăng báo cáo lỗi (khi cần thiết)!
rasmus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.