mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-28 17:20:47 +08:00
875 lines
13 KiB
Plaintext
875 lines
13 KiB
Plaintext
#let horizontalrule = line(start: (25%,0%), end: (75%,0%))
|
|
|
|
#show terms.item: it => block(breakable: false)[
|
|
#text(weight: "bold")[#it.term]
|
|
#block(inset: (left: 1.5em, top: -0.4em))[#it.description]
|
|
]
|
|
|
|
#set table(
|
|
inset: 6pt,
|
|
stroke: none
|
|
)
|
|
|
|
#show figure.where(
|
|
kind: table
|
|
): set figure.caption(position: top)
|
|
|
|
#show figure.where(
|
|
kind: image
|
|
): set figure.caption(position: bottom)
|
|
|
|
#let content-to-string(content) = {
|
|
if content.has("text") {
|
|
content.text
|
|
} else if content.has("children") {
|
|
content.children.map(content-to-string).join("")
|
|
} else if content.has("body") {
|
|
content-to-string(content.body)
|
|
} else if content == [ ] {
|
|
" "
|
|
}
|
|
}
|
|
#let conf(
|
|
title: none,
|
|
subtitle: none,
|
|
authors: (),
|
|
keywords: (),
|
|
date: none,
|
|
abstract-title: none,
|
|
abstract: none,
|
|
thanks: none,
|
|
cols: 1,
|
|
margin: (x: 1.25in, y: 1.25in),
|
|
paper: "us-letter",
|
|
lang: "en",
|
|
region: "US",
|
|
font: none,
|
|
fontsize: 11pt,
|
|
mathfont: none,
|
|
codefont: none,
|
|
linestretch: 1,
|
|
sectionnumbering: none,
|
|
linkcolor: none,
|
|
citecolor: none,
|
|
filecolor: none,
|
|
pagenumbering: "1",
|
|
doc,
|
|
) = {
|
|
set document(
|
|
title: title,
|
|
keywords: keywords,
|
|
)
|
|
set document(
|
|
author: authors.map(author => content-to-string(author.name)).join(", ", last: " & "),
|
|
) if authors != none and authors != ()
|
|
set page(
|
|
paper: paper,
|
|
margin: margin,
|
|
numbering: pagenumbering,
|
|
columns: cols
|
|
)
|
|
|
|
set par(
|
|
justify: true,
|
|
leading: linestretch * 0.65em
|
|
)
|
|
set text(lang: lang,
|
|
region: region,
|
|
size: fontsize)
|
|
|
|
set text(font: font) if font != none
|
|
show math.equation: set text(font: mathfont) if mathfont != none
|
|
show raw: set text(font: codefont) if codefont != none
|
|
|
|
set heading(numbering: sectionnumbering)
|
|
|
|
show link: set text(fill: rgb(content-to-string(linkcolor))) if linkcolor != none
|
|
show ref: set text(fill: rgb(content-to-string(citecolor))) if citecolor != none
|
|
show link: this => {
|
|
if filecolor != none and type(this.dest) == label {
|
|
text(this, fill: rgb(content-to-string(filecolor)))
|
|
} else {
|
|
text(this)
|
|
}
|
|
}
|
|
|
|
#let has-title-block = title != none or (authors != none and authors != ()) or
|
|
date != none or abstract != none
|
|
#if has-title-block {
|
|
place(top, float: true, scope: "parent", clearance: 4mm, block(below: 1em, width: 100%)[
|
|
#if title != none {
|
|
align(center, block[
|
|
#text(weight: "bold", size: 1.5em, hyphenate: false)[#title #if thanks != none {
|
|
footnote(thanks, numbering: "*")
|
|
counter(footnote).update(n => n - 1)
|
|
}]
|
|
#(
|
|
if subtitle != none {
|
|
parbreak()
|
|
text(weight: "bold", size: 1.25em, hyphenate: false)[#subtitle]
|
|
}
|
|
)])
|
|
}
|
|
|
|
#if authors != none and authors != [] {
|
|
let count = authors.len()
|
|
let ncols = calc.min(count, 3)
|
|
grid(
|
|
columns: (1fr,) * ncols,
|
|
row-gutter: 1.5em,
|
|
..authors.map(author => align(center)[
|
|
#author.name \
|
|
#author.affiliation \
|
|
#author.email
|
|
])
|
|
)
|
|
}
|
|
|
|
#if date != none {
|
|
align(center)[#block(inset: 1em)[
|
|
#date
|
|
]]
|
|
}
|
|
|
|
#if abstract != none {
|
|
block(inset: 2em)[
|
|
#text(weight: "semibold")[#abstract-title] #h(1em) #abstract
|
|
]
|
|
}
|
|
])
|
|
}
|
|
doc
|
|
}
|
|
#show: doc => conf(
|
|
title: [Pandoc Test Suite],
|
|
authors: (
|
|
( name: [John MacFarlane],
|
|
affiliation: "",
|
|
email: "" ),
|
|
( name: [Anonymous],
|
|
affiliation: "",
|
|
email: "" ),
|
|
),
|
|
date: [July 17, 2006],
|
|
abstract-title: [Abstract],
|
|
pagenumbering: "1",
|
|
cols: 1,
|
|
doc,
|
|
)
|
|
|
|
|
|
This is a set of tests for pandoc. Most of them are adapted from John Gruber's
|
|
markdown test suite.
|
|
|
|
#horizontalrule
|
|
|
|
= Headers
|
|
<headers>
|
|
== Level 2 with an #link("/url")[embedded link]
|
|
<level-2-with-an-embedded-link>
|
|
=== Level 3 with #emph[emphasis]
|
|
<level-3-with-emphasis>
|
|
==== Level 4
|
|
<level-4>
|
|
===== Level 5
|
|
<level-5>
|
|
= Level 1
|
|
<level-1>
|
|
== Level 2 with #emph[emphasis]
|
|
<level-2-with-emphasis>
|
|
=== Level 3
|
|
<level-3>
|
|
with no blank line
|
|
|
|
== Level 2
|
|
<level-2>
|
|
with no blank line
|
|
|
|
#horizontalrule
|
|
|
|
= Paragraphs
|
|
<paragraphs>
|
|
Here's a regular paragraph.
|
|
|
|
In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item.
|
|
Because a hard-wrapped line in the middle of a paragraph looked like a list
|
|
item.
|
|
|
|
Here's one with a bullet. \* criminey.
|
|
|
|
There should be a hard line break \ here.
|
|
|
|
#horizontalrule
|
|
|
|
= Block Quotes
|
|
<block-quotes>
|
|
E-mail style:
|
|
|
|
#quote(block: true)[
|
|
This is a block quote. It is pretty short.
|
|
]
|
|
|
|
#quote(block: true)[
|
|
Code in a block quote:
|
|
|
|
```
|
|
sub status {
|
|
print "working";
|
|
}
|
|
```
|
|
|
|
A list:
|
|
|
|
+ item one
|
|
+ item two
|
|
|
|
Nested block quotes:
|
|
|
|
#quote(block: true)[
|
|
nested
|
|
]
|
|
|
|
#quote(block: true)[
|
|
nested
|
|
]
|
|
]
|
|
|
|
This should not be a block quote: 2 \> 1.
|
|
|
|
And a following paragraph.
|
|
|
|
#horizontalrule
|
|
|
|
= Code Blocks
|
|
<code-blocks>
|
|
Code:
|
|
|
|
```
|
|
---- (should be four hyphens)
|
|
|
|
sub status {
|
|
print "working";
|
|
}
|
|
|
|
this code block is indented by one tab
|
|
```
|
|
|
|
And:
|
|
|
|
```
|
|
this code block is indented by two tabs
|
|
|
|
These should not be escaped: \$ \\ \> \[ \{
|
|
```
|
|
|
|
#horizontalrule
|
|
|
|
= Lists
|
|
<lists>
|
|
== Unordered
|
|
<unordered>
|
|
Asterisks tight:
|
|
|
|
- asterisk 1
|
|
- asterisk 2
|
|
- asterisk 3
|
|
|
|
Asterisks loose:
|
|
|
|
- asterisk 1
|
|
|
|
- asterisk 2
|
|
|
|
- asterisk 3
|
|
|
|
Pluses tight:
|
|
|
|
- Plus 1
|
|
- Plus 2
|
|
- Plus 3
|
|
|
|
Pluses loose:
|
|
|
|
- Plus 1
|
|
|
|
- Plus 2
|
|
|
|
- Plus 3
|
|
|
|
Minuses tight:
|
|
|
|
- Minus 1
|
|
- Minus 2
|
|
- Minus 3
|
|
|
|
Minuses loose:
|
|
|
|
- Minus 1
|
|
|
|
- Minus 2
|
|
|
|
- Minus 3
|
|
|
|
== Ordered
|
|
<ordered>
|
|
Tight:
|
|
|
|
+ First
|
|
+ Second
|
|
+ Third
|
|
|
|
and:
|
|
|
|
+ One
|
|
+ Two
|
|
+ Three
|
|
|
|
Loose using tabs:
|
|
|
|
+ First
|
|
|
|
+ Second
|
|
|
|
+ Third
|
|
|
|
and using spaces:
|
|
|
|
+ One
|
|
|
|
+ Two
|
|
|
|
+ Three
|
|
|
|
Multiple paragraphs:
|
|
|
|
+ Item 1, graf one.
|
|
|
|
Item 1. graf two. The quick brown fox jumped over the lazy dog's back.
|
|
|
|
+ Item 2.
|
|
|
|
+ Item 3.
|
|
|
|
== Nested
|
|
<nested>
|
|
- Tab
|
|
- Tab
|
|
- Tab
|
|
|
|
Here's another:
|
|
|
|
+ First
|
|
+ Second:
|
|
- Fee
|
|
- Fie
|
|
- Foe
|
|
+ Third
|
|
|
|
Same thing but with paragraphs:
|
|
|
|
+ First
|
|
|
|
+ Second:
|
|
|
|
- Fee
|
|
- Fie
|
|
- Foe
|
|
|
|
+ Third
|
|
|
|
== Tabs and spaces
|
|
<tabs-and-spaces>
|
|
- this is a list item indented with tabs
|
|
|
|
- this is a list item indented with spaces
|
|
|
|
- this is an example list item indented with tabs
|
|
|
|
- this is an example list item indented with spaces
|
|
|
|
== Fancy list markers
|
|
<fancy-list-markers>
|
|
#block[
|
|
#set enum(numbering: "(1)", start: 2)
|
|
+ begins with 2
|
|
|
|
+ and now 3
|
|
|
|
with a continuation
|
|
|
|
#block[
|
|
#set enum(numbering: "i.", start: 4)
|
|
+ sublist with roman numerals, starting with 4
|
|
+ more items
|
|
#block[
|
|
#set enum(numbering: "(A)", start: 1)
|
|
+ a subsublist
|
|
+ a subsublist
|
|
]
|
|
]
|
|
]
|
|
|
|
Nesting:
|
|
|
|
#block[
|
|
#set enum(numbering: "A.", start: 1)
|
|
+ Upper Alpha
|
|
#block[
|
|
#set enum(numbering: "I.", start: 1)
|
|
+ Upper Roman.
|
|
#block[
|
|
#set enum(numbering: "(1)", start: 6)
|
|
+ Decimal start with 6
|
|
#block[
|
|
#set enum(numbering: "a)", start: 3)
|
|
+ Lower alpha with paren
|
|
]
|
|
]
|
|
]
|
|
]
|
|
|
|
Autonumbering:
|
|
|
|
+ Autonumber.
|
|
+ More.
|
|
+ Nested.
|
|
|
|
Should not be a list item:
|
|
|
|
M.A.~2007
|
|
|
|
B. Williams
|
|
|
|
#horizontalrule
|
|
|
|
= Definition Lists
|
|
<definition-lists>
|
|
Tight using spaces:
|
|
|
|
/ apple: #block[
|
|
red fruit
|
|
]
|
|
|
|
/ orange: #block[
|
|
orange fruit
|
|
]
|
|
|
|
/ banana: #block[
|
|
yellow fruit
|
|
]
|
|
|
|
Tight using tabs:
|
|
|
|
/ apple: #block[
|
|
red fruit
|
|
]
|
|
|
|
/ orange: #block[
|
|
orange fruit
|
|
]
|
|
|
|
/ banana: #block[
|
|
yellow fruit
|
|
]
|
|
|
|
Loose:
|
|
|
|
/ apple: #block[
|
|
red fruit
|
|
]
|
|
|
|
/ orange: #block[
|
|
orange fruit
|
|
]
|
|
|
|
/ banana: #block[
|
|
yellow fruit
|
|
]
|
|
|
|
Multiple blocks with italics:
|
|
|
|
/ #emph[apple]: #block[
|
|
red fruit
|
|
|
|
contains seeds, crisp, pleasant to taste
|
|
]
|
|
|
|
/ #emph[orange]: #block[
|
|
orange fruit
|
|
|
|
```
|
|
{ orange code block }
|
|
```
|
|
|
|
#quote(block: true)[
|
|
orange block quote
|
|
]
|
|
]
|
|
|
|
Multiple definitions, tight:
|
|
|
|
/ apple: #block[
|
|
red fruit
|
|
|
|
computer
|
|
]
|
|
|
|
/ orange: #block[
|
|
orange fruit
|
|
|
|
bank
|
|
]
|
|
|
|
Multiple definitions, loose:
|
|
|
|
/ apple: #block[
|
|
red fruit
|
|
|
|
computer
|
|
]
|
|
|
|
/ orange: #block[
|
|
orange fruit
|
|
|
|
bank
|
|
]
|
|
|
|
Blank line after term, indented marker, alternate markers:
|
|
|
|
/ apple: #block[
|
|
red fruit
|
|
|
|
computer
|
|
]
|
|
|
|
/ orange: #block[
|
|
orange fruit
|
|
|
|
+ sublist
|
|
+ sublist
|
|
]
|
|
|
|
= HTML Blocks
|
|
<html-blocks>
|
|
Simple block on one line:
|
|
|
|
#block[
|
|
foo
|
|
]
|
|
And nested without indentation:
|
|
|
|
#block[
|
|
#block[
|
|
#block[
|
|
foo
|
|
|
|
]
|
|
]
|
|
#block[
|
|
bar
|
|
]
|
|
]
|
|
Interpreted markdown in a table:
|
|
|
|
This is #emph[emphasized]
|
|
And this is #strong[strong]
|
|
Here's a simple block:
|
|
|
|
#block[
|
|
foo
|
|
|
|
]
|
|
This should be a code block, though:
|
|
|
|
```
|
|
<div>
|
|
foo
|
|
</div>
|
|
```
|
|
|
|
As should this:
|
|
|
|
```
|
|
<div>foo</div>
|
|
```
|
|
|
|
Now, nested:
|
|
|
|
#block[
|
|
#block[
|
|
#block[
|
|
foo
|
|
]
|
|
]
|
|
]
|
|
This should just be an HTML comment:
|
|
|
|
Multiline:
|
|
|
|
Code block:
|
|
|
|
```
|
|
<!-- Comment -->
|
|
```
|
|
|
|
Just plain comment, with trailing spaces on the line:
|
|
|
|
Code:
|
|
|
|
```
|
|
<hr />
|
|
```
|
|
|
|
Hr's:
|
|
|
|
#horizontalrule
|
|
|
|
= Inline Markup
|
|
<inline-markup>
|
|
This is #emph[emphasized], and so #emph[is this].
|
|
|
|
This is #strong[strong], and so #strong[is this].
|
|
|
|
An #emph[#link("/url")[emphasized link]].
|
|
|
|
#strong[#emph[This is strong and em.]]
|
|
|
|
So is #strong[#emph[this]] word.
|
|
|
|
#strong[#emph[This is strong and em.]]
|
|
|
|
So is #strong[#emph[this]] word.
|
|
|
|
This is code: `>`, `$`, `\`, `\$`, `<html>`.
|
|
|
|
#strike[This is #emph[strikeout].]
|
|
|
|
Superscripts: a#super[bc]d a#super[#emph[hello]] a#super[hello~there].
|
|
|
|
Subscripts: H#sub[2]O, H#sub[23]O, H#sub[many~of~them]O.
|
|
|
|
These should not be superscripts or subscripts, because of the unescaped spaces:
|
|
a^b c^d, a\~b c\~d.
|
|
|
|
#horizontalrule
|
|
|
|
= Smart quotes, ellipses, dashes
|
|
<smart-quotes-ellipses-dashes>
|
|
"Hello," said the spider. "'Shelob' is my name."
|
|
|
|
'A', 'B', and 'C' are letters.
|
|
|
|
'Oak,' 'elm,' and 'beech' are names of trees. So is 'pine.'
|
|
|
|
'He said, "I want to go."' Were you alive in the 70's?
|
|
|
|
Here is some quoted '`code`' and a
|
|
"#link("http://example.com/?foo=1&bar=2")[quoted link]".
|
|
|
|
Some dashes: one---two --- three---four --- five.
|
|
|
|
Dashes between numbers: 5--7, 255--66, 1987--1999.
|
|
|
|
Ellipses…and…and….
|
|
|
|
#horizontalrule
|
|
|
|
= LaTeX
|
|
<latex>
|
|
-
|
|
- $2 + 2 = 4$
|
|
- $x in y$
|
|
- $alpha and omega$
|
|
- $223$
|
|
- $p$-Tree
|
|
- Here's some display math:
|
|
$ frac(d, d x) f\(x\)= lim_(h arrow.r 0) frac(f\(x + h\)- f\(x\), h) $
|
|
- Here's one that has a line break in it: $alpha + omega times x^2$.
|
|
|
|
These shouldn't be math:
|
|
|
|
- To get the famous equation, write `$e = mc^2$`.
|
|
- \$22,000 is a #emph[lot] of money. So is \$34,000. (It worked if "lot" is
|
|
emphasized.)
|
|
- Shoes (\$20) and socks (\$5).
|
|
- Escaped `$`: \$73 #emph[this should be emphasized] 23\$.
|
|
|
|
Here's a LaTeX table:
|
|
|
|
#horizontalrule
|
|
|
|
= Special Characters
|
|
<special-characters>
|
|
Here is some unicode:
|
|
|
|
- I hat: Î
|
|
- o umlaut: ö
|
|
- section: §
|
|
- set membership: ∈
|
|
- copyright: ©
|
|
|
|
AT&T has an ampersand in their name.
|
|
|
|
AT&T is another way to write it.
|
|
|
|
This & that.
|
|
|
|
4 \< 5.
|
|
|
|
6 \> 5.
|
|
|
|
Backslash: \\
|
|
|
|
Backtick: \`
|
|
|
|
Asterisk: \*
|
|
|
|
Underscore: \_
|
|
|
|
Left brace: {
|
|
|
|
Right brace: }
|
|
|
|
Left bracket: \[
|
|
|
|
Right bracket: \]
|
|
|
|
Left paren: (
|
|
|
|
Right paren: )
|
|
|
|
Greater-than: \>
|
|
|
|
Hash: \#
|
|
|
|
Period: .
|
|
|
|
Bang: !
|
|
|
|
Plus: +
|
|
|
|
Minus: -
|
|
|
|
#horizontalrule
|
|
|
|
= Links
|
|
<links>
|
|
== Explicit
|
|
<explicit>
|
|
Just a #link("/url/")[URL].
|
|
|
|
#link("/url/")[URL and title].
|
|
|
|
#link("/url/")[URL and title].
|
|
|
|
#link("/url/")[URL and title].
|
|
|
|
#link("/url/")[URL and title]
|
|
|
|
#link("/url/")[URL and title]
|
|
|
|
#link("/url/with_underscore")[with\_underscore]
|
|
|
|
#link("mailto:nobody@nowhere.net")[Email link]
|
|
|
|
#link("")[Empty].
|
|
|
|
== Reference
|
|
<reference>
|
|
Foo #link("/url/")[bar].
|
|
|
|
With #link("/url/")[embedded \[brackets\]].
|
|
|
|
#link("/url/")[b] by itself should be a link.
|
|
|
|
Indented #link("/url")[once].
|
|
|
|
Indented #link("/url")[twice].
|
|
|
|
Indented #link("/url")[thrice].
|
|
|
|
This should \[not\]\[\] be a link.
|
|
|
|
```
|
|
[not]: /url
|
|
```
|
|
|
|
Foo #link("/url/")[bar].
|
|
|
|
Foo #link("/url/")[biz].
|
|
|
|
== With ampersands
|
|
<with-ampersands>
|
|
Here's a
|
|
#link("http://example.com/?foo=1&bar=2")[link with an ampersand in the URL].
|
|
|
|
Here's a link with an amersand in the link text: #link("http://att.com/")[AT&T].
|
|
|
|
Here's an #link("/script?foo=1&bar=2")[inline link].
|
|
|
|
Here's an #link("/script?foo=1&bar=2")[inline link in pointy braces].
|
|
|
|
== Autolinks
|
|
<autolinks>
|
|
With an ampersand: #link("http://example.com/?foo=1&bar=2")
|
|
|
|
- In a list?
|
|
- #link("http://example.com/")
|
|
- It should.
|
|
|
|
An e-mail address: #link("mailto:nobody@nowhere.net")[nobody\@nowhere.net]
|
|
|
|
#quote(block: true)[
|
|
Blockquoted: #link("http://example.com/")
|
|
]
|
|
|
|
Auto-links should not occur here: `<http://example.com/>`
|
|
|
|
```
|
|
or here: <http://example.com/>
|
|
```
|
|
|
|
#horizontalrule
|
|
|
|
= Images
|
|
<images>
|
|
From "Voyage dans la Lune" by Georges Melies (1902):
|
|
|
|
#figure(image("lalune.jpg", alt: "lalune"),
|
|
caption: [
|
|
lalune
|
|
]
|
|
)
|
|
|
|
Here is a movie #box(image("movie.jpg", alt: "movie")) icon.
|
|
|
|
#horizontalrule
|
|
|
|
= Footnotes
|
|
<footnotes>
|
|
Here is a footnote reference,#footnote[Here is the footnote. It can go anywhere
|
|
after the footnote reference. It need not be placed at the end of the document.]
|
|
and another.#footnote[Here's the long note. This one contains multiple blocks.
|
|
|
|
Subsequent blocks are indented to show that they belong to the footnote (as with
|
|
list items).
|
|
|
|
```
|
|
{ <code> }
|
|
```
|
|
|
|
If you want, you can indent every line, but you can also be lazy and just indent
|
|
the first line of each block.] This should #emph[not] be a footnote reference,
|
|
because it contains a space.\[^my note\] Here is an inline note.#footnote[This
|
|
is #emph[easier] to type. Inline notes may contain
|
|
#link("http://google.com")[links] and `]` verbatim characters, as well as
|
|
\[bracketed text\].]
|
|
|
|
#quote(block: true)[
|
|
Notes can go in quotes.#footnote[In quote.]
|
|
]
|
|
|
|
+ And in list items.#footnote[In list.]
|
|
|
|
This paragraph should not be part of the note, as it is not indented.
|