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.
...
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.