Memformat kertas HTML dengan Org-mode


11

Default mode-Org selama ekspor HTML adalah menempatkan penulis di postamble di bagian bawah halaman.

Tapi saya ingin mengekspor dokumen seperti kertas dengan penulis antara judul dan abstrak. Apakah mungkin entah bagaimana menempatkan penulis setelah judul?

Dan apakah mungkin untuk memberi label abstrak sebagai abstrak? Saya telah menggunakan pembatas

#+BEGIN_abstract
...
#+END_abstract

untuk menandai teks sebagai abstak tetapi diterjemahkan hanya sebagai paragraf normal (tidak ada blokquote seperti indent). Apakah mungkin untuk mendapatkan indentasi yang tepat untuk label abstrak dan lokal?


2
Untuk persyaratan abstrak gunakan css. ...akan dibungkus sebagai <div class="abstract"><p>...</p></div>. Untuk memiliki judul seperti LaTeX mungkin Anda harus mengisi laporan bug. Untuk saat ini gunakan makro {{{AUTHOR}}}dan cuplikan @@html:whatever@@untuk membangun apa yang Anda inginkan.
rasmus

Jawaban:


10

Mungkin sesuatu seperti ini (diuji dengan LaTeX dan 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

Perhatikan html-headerjuga bisa dihasilkan melalui org-html-preamble. Perhatikan juga bahwa from org 8.3 org-latex-title-commanddapat digunakan untuk mengkustomisasi judul sebagai format-string.


2

Lihatlah kode sumbernya, sepertinya tidak ada pilihan untuk melakukan ini.

Saya tidak yakin apa yang Anda inginkan, berikan dua kemungkinan cara:

  1. Cukup tambahkan #+BEGIN_HTML ... #+END_HTMLblok untuk menulis apa yang Anda inginkan. (Konten yang ditulis di dalamnya akan diperlakukan sebagai sepenuhnya HTML.) Tetapi Anda mungkin perlu menambahkan #+OPTIONS: toc: niluntuk menonaktifkan TOC atau penulis akan ditempatkan di bawah TOC.

  2. Definisikan kembali fungsi ekspor dan lakukan apa yang Anda inginkan (Baris Pemberitahuan 50 ~ 52), cukup tempatkan kode berikut setelah (require 'ox-html)di file konfigurasi Anda:

      (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
Ini benar-benar cara yang salah untuk ini !! Lebih disukai, Anda perlu membuat turunan-didukung, melihat org-export-define-derived-backenddan menambahkan templat baru ke :translate-alist. Untuk contoh konkret ox-beamer.el, periksa , ox-koma-script.eldan misalnya ox-s5.el.
rasmus

1

Masalah paling sulit yang saya temui adalah gaya penataan bagian yang berbeda dan penomoran kondisi bagian yang berbeda. Ini adalah solusi untuk kedua masalah ini.

Ini kertas saya:

#+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:

Pertama, ini termasuk file org dengan beberapa opsi tambahan. File ini, yang disebut di style.orgatas menetapkan ekspor HTML untuk memuat lembar gaya khusus, dan menetapkan beberapa opsi LaTeX. Jika Anda tidak mengekspor ke LaTeX, Anda tidak akan membutuhkannya.

#+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}

Untuk menjadikan ini sebagai HTML seperti kertas, sedikit CSS sudah cukup (disimpan dalam 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;
}

Namun, nomor bagian akan salah. Mode org dapat berupa angka semua bagian, atau tidak ada. Makalah biasanya membutuhkan angka pada bagian tubuh, tetapi bukan Abstrak dan Ringkasan. Potongan kode berikut akan membuat Org menaruh angka di depan bagian reguler, tetapi menekan angka jika properti :NUMBERS: nodisetel:

(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))

Ini berfungsi baik untuk ekspor LaTeX, tetapi tidak dalam ekspor HTML. Dengan CSS modern, browser dapat melakukan penomoran untuk Anda (ditambahkan ke 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;
}

Dengan itu, Anda dapat mengekspor kertas ke LaTeX dan HTML.


" Mode org dapat berupa angka semua bagian, atau tidak ada ." Uhm, bagaimana kalau meneruskan properti UNNUMBERED: tke judul? Dari ORG-NEWS: Berita utama, yang propertinya UNNUMBEREDnon-nihil, sekarang diekspor tanpa nomor bagian terlepas dari levelnya. Properti ini diwarisi oleh anak-anak.
rasmus

@rasmus itu luar biasa! Namun, sejauh yang saya tahu, ini hanya diperkenalkan dalam mode-org 8.3, yang belum dirilis.
bastibe

Ini diimplementasikan dalam master dan bekerja pada semua backend. Org 8.3 ada di ambang pintu. Bahwa itu belum dirilis berarti ini adalah waktu yang tepat untuk mengujinya dan memposting laporan bug (sebagaimana diperlukan)!
rasmus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.