Відформатуйте папір HTML в Org-режимі


11

За замовчуванням в Org-режимі під час експорту HTML-код, це розмістити автора в поштовій формі внизу сторінки.

Але я хотів би експортувати документ із папером, як автор, між заголовком та рефератом. Чи можна якось розмістити автора після назви?

І чи можна маркувати реферат як абстрактний? Я використовував роздільники

#+BEGIN_abstract
...
#+END_abstract

щоб позначити текст як абстракцію, але він подається просто як звичайний абзац (без блок-цитати, як відступ). Чи можливо отримати правильний відступ для конспекту та локалізованої мітки?


2
Для абстрактних вимог використовуйте css. ...буде завернуто як <div class="abstract"><p>...</p></div>. Якщо у вас є заголовок LaTeX типу, можливо, ви повинні заповнити звіт про помилку. Зараз використовуйте макрос {{{AUTHOR}}}і фрагменти, @@html:whatever@@щоб створити те, що ви хочете.
rasmus

Відповіді:


10

Можливо щось подібне (тестовано з LaTeX та 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

Зверніть увагу, що html-headerтакож можна створити через org-html-preamble. Зауважте також, що з org 8.3 org-latex-title-commandможе використовуватися для налаштування заголовка у вигляді рядка формату.


2

Погляньте на вихідний код, здається, що для цього немає варіанту.

Я не впевнений, чого ви насправді хочете, просто надайте можливі два способи:

  1. Просто додайте #+BEGIN_HTML ... #+END_HTMLблок, щоб написати те, що ви хочете. (Вміст, написаний в ній, буде розглядатися як повністю HTML.) Але вам може знадобитися додати, #+OPTIONS: toc: nilщоб відключити TOC, або автор буде розміщений під TOC.

  2. Повторно визначте функцію експорту та виконайте те, що ви хочете (Повідомлення рядка 50 ~ 52), просто помістіть наступний код (require 'ox-html)у своєму конфігураційному файлі:

      (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
Це абсолютно неправильний шлях до цього !! Переважно, вам потрібно зробити похідну копію, побачити org-export-define-derived-backendта додати новий шаблон до :translate-alist. Для конкретних прикладів перевірки ox-beamer.el, ox-koma-script.elі , наприклад ox-s5.el.
rasmus

1

Найскладніша проблема, з якою я зіткнувся з цим, - це умовна стилізація різних розділів та умовна нумерація різних розділів. Це вирішення обох цих проблем.

Ось моя робота:

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

По-перше, це включає файл org з деякими додатковими параметрами. Цей файл, званий style.orgвище, встановлює експорт HTML для завантаження користувальницького аркуша стилів та встановлює кілька параметрів LaTeX. Якщо ви не експортуєте до LaTeX, вони вам не знадобляться.

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

Для того, щоб відобразити це як паперовий HTML, достатньо трохи CSS (збережено у 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;
}

Однак номери розділів будуть неправильними. Org mode може або нумерувати всі розділи, або жоден. Документи, як правило, потребують цифр на розділах тіла, але не Анотація та Підсумок. Наступний фрагмент коду змусить Org ставити числа перед звичайними розділами, але придушити числа, якщо властивість :NUMBERS: noвстановлено:

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

Це добре працює для експорту LaTeX, але не для експорту HTML. За допомогою сучасного CSS, браузери можуть робити нумерацію для вас, хоча (додається 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;
}

З цим ви можете експортувати папір як у LaTeX, так і в HTML.


" Режим Org може або нумерувати всі розділи, або жоден ." Ум, як щодо передачі власності UNNUMBERED: tдо заголовка? З ORG-NEWS: Заголовки, для яких властивість UNNUMBEREDне відповідає нулю, зараз експортуються без номерів розділів незалежно від їх рівня. Майно успадковується дітьми.
rasmus

@rasmus, що приголомшливо! Однак, наскільки я можу сказати, це було введено лише в org-режимі 8.3, який ще не випущений.
bastibe

Він реалізований у програмі master та працює над усіма пакетами. Org 8.3 знаходиться на порозі. Те, що він не був випущений, означає, що це ідеальний час для тестування та публікації звітів про помилки (за необхідності)!
rasmus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.