Le problème le plus difficile que j'ai rencontré est le style conditionnel de différentes sections et la numérotation conditionnelle de différentes sections. Il s'agit d'une solution pour ces deux problèmes.
Voici mon article:
#+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:
Tout d'abord, cela inclut un fichier org avec quelques options supplémentaires. Ce fichier, appelé style.org
ci-dessus, définit l'exportation HTML pour charger une feuille de style personnalisée et définit quelques options LaTeX. Si vous n'exportez pas vers LaTeX, vous n'en aurez pas besoin.
#+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}
Pour le rendre en HTML papier, un peu de CSS suffit (enregistré dans 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;
}
Cependant, les numéros de section seront erronés. Le mode org peut soit numéroter toutes les sections, soit aucune. Les articles ont généralement besoin de numéros sur les sections du corps, mais pas du résumé et du résumé. Le morceau de code suivant obligera Org à placer des nombres devant les sections régulières, mais supprimera les nombres si la propriété :NUMBERS: no
est définie:
(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))
Cela fonctionne bien pour l'exportation LaTeX, mais pas dans l'exportation HTML. Avec le CSS moderne, les navigateurs peuvent faire la numérotation pour vous (en annexe 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;
}
Avec cela, vous pouvez exporter votre papier vers LaTeX et HTML.
...
sera enveloppé comme<div class="abstract"><p>...</p></div>
. Pour avoir un titre similaire à LaTeX, vous devriez peut-être remplir un rapport de bogue. Pour l'instant, utilisez la macro{{{AUTHOR}}}
et les extraits@@html:whatever@@
pour créer ce que vous voulez.