Bir HTML kağıdını Kuruluş kipiyle biçimlendirme


11

HTML dışa aktarma sırasında kuruluş kipinin varsayılanı, yazarı sayfanın en altındaki postamble'a yerleştirmektir.

Ancak yazarla başlık ve özet arasında bir belge gibi bir belge vermek istiyorum. Bir şekilde yazarın başlıktan sonra yerleştirilmesi mümkün müdür?

Ve özü soyut olarak etiketlemek mümkün mü? Sınırlayıcıları kullandım

#+BEGIN_abstract
...
#+END_abstract

metni abstact olarak işaretlemek için kullanılır, ancak normal bir paragraf olarak işlenir (girinti gibi blok alıntı yok). Özet ve yerelleştirilmiş bir etiket için doğru girinti elde etmek mümkün müdür?


2
Soyut gereksinimler için css kullanın. ...olarak sarılacaktır <div class="abstract"><p>...</p></div>. LaTeX benzeri bir başlık için belki bir hata raporu doldurmalısınız. Şimdilik, istediğiniz şeyi oluşturmak için makro {{{AUTHOR}}}ve parçacıkları @@html:whatever@@kullanın.
rasmus

Yanıtlar:


10

Belki böyle bir şey (LaTeX ve HTML ile test edilmiştir)

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

İle html-headerde oluşturulabileceğini unutmayın org-html-preamble. Ayrıca org 8.3 org-latex-title-command, başlığın bir biçim dizesi olarak özelleştirilmesi için kullanılabileceğini de unutmayın .


2

Kaynak koduna bir göz atın, bunu yapmak için bir seçenek yok gibi görünüyor.

Gerçekten ne istediğinden emin değilim, sadece iki yol sağla:

  1. #+BEGIN_HTML ... #+END_HTMLİstediğinizi yazmak için bir blok ekleyin . (İçinde yazılı içerik tamamen HTML olarak değerlendirilecektir.) Ancak, #+OPTIONS: toc: nilTOC'yi devre dışı bırakmak için eklemeniz gerekebilir veya yazar TOC altına yerleştirilir.

  2. Dışa aktarma işlevini yeniden tanımlayın ve istediğinizi yapın (Uyarı satırı 50 ~ 52), (require 'ox-html)yapılandırma dosyanıza aşağıdaki kodu yerleştirmeniz yeterlidir:

      (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
Bu kesinlikle bunun yanlış yolu! Tercihen, türetilmiş bir desteklemeniz, org-export-define-derived-backendyeni şablonu görüp eklemeniz gerekir :translate-alist. Beton örnekleri kontrol için ox-beamer.el, ox-koma-script.elörneğin ve ox-s5.el.
rasmus

1

Bununla ilgili karşılaştığım en zor problem, farklı bölümlerin koşullu stilleri ve farklı bölümlerin koşullu numaralandırmalarıdır. Bu, bu sorunların her ikisi için de bir çözümdür.

İşte makalem:

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

İlk olarak, bazı ek seçeneklere sahip bir org dosyası içerir. style.orgYukarıda adı geçen bu dosya, HTML dışa aktarmayı özel bir stil sayfası yükleyecek şekilde ayarlar ve birkaç LaTeX seçeneği ayarlar. LaTeX'e dışa aktarmıyorsanız, bunlara ihtiyacınız olmayacak.

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

Bunu kağıt benzeri HTML olarak oluşturmak için küçük bir CSS yeterlidir (kaydedildi 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;
}

Ancak, bölüm numaraları yanlış olacaktır. Kuruluş modu tüm bölümleri numaralayabilir veya hiçbirini numaralandıramaz. Makaleler genellikle gövde bölümlerinde sayılara ihtiyaç duyar, ancak Özet ve Özet'e değil. Aşağıdaki kod parçası, Org'un normal bölümlerin önüne sayı koymasını sağlar, ancak özellik :NUMBERS: noayarlanmışsa sayıları bastırır :

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

Bu, LaTeX dışa aktarma için iyi çalışır, ancak HTML dışa aktarmada işe yaramaz. Modern CSS ile, tarayıcılar numaralandırmayı sizin için yapabilir (eklenmiştir 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;
}

Bununla, makalenizi hem LaTeX'e hem de HTML'ye aktarabilirsiniz.


" Kuruluş modu tüm bölümleri numaralandırabilir veya hiçbirini numaralandıramaz ." Uhm, mülkü UNNUMBERED: tbir başlığa geçirmeye ne dersin ? ORG-NEWS'ten: Mülkün UNNUMBEREDsıfır olmadığı başlıklar artık seviyelerine bakılmaksızın bölüm numaraları olmadan dışa aktarılıyor. Tesis çocuklar tarafından miras alınmıştır.
rasmus

@rasmus bu harika! Bununla birlikte, anlayabildiğim kadarıyla, bu sadece henüz yayınlanmayan org-mod 8.3'de tanıtıldı.
bastibe

Usta olarak uygulanır ve tüm arka uçlarda çalışır. Org 8.3 kapıda. Yayınlanmadığı, test etmek ve hata raporları göndermek için mükemmel bir zaman anlamına gelir (gerekirse)!
rasmus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.