Chienomi

Pandoc Markdown のあまり知られていない書法

ソフトウェア

これで全部ではないし、どちらかといえばPandocユーザーズガイド日本版に記載されているものはそれを読むほうが早いので、記載されていないものを中心にあまり知られていないものを集めてみた。

上付き文字 (superscript)

^ではさむ。

30cm^3^

下付き文字 (subscript)

~ではさむ。

2~16~

打ち消し

~~で挟む

~~馬鹿な~~一風変わった

ヘッダーのIDを制御する

日本語を使用している場合やかぶる場合、あるいは主導でヘッダーへのフラグメントを書く場合などは名前をつけたいもの。

# とあるヘッダ {#HelloWorld}

これでこのh1ヘッダのIDはHelloWorldになる。

divとspan

ユーザーズガイドに記載されていない機能。

div

3つ以上のコロンをフェンスブロックのように使用する。

:::

divの中の段落

:::

span

[]形式。

一部分を[spanで囲む]ことができる。

特にspanに関しては{}を伴わないのは危険かもしれない。

任意にID/クラス/属性を書く

ユーザーズガイドに記載されていない機能。

{...}という形式でヘッダやコードブロックに限らずIDを明示することができる。 #IDによるIDと、.classによるクラス表記ができるほか、attr_name="attr_value"という形で属性も書くことができる。

これはインラインコード, コードブロック, リンク, 画像, ヘッダ, div, spanなどで利用できる。

クラスが[redになっているspan]{.red}ブロック

[external属性つきリンク](http://example.com/fire.html){rel="external"}

順序つきリストにラベルをつける

順序つきリストマーカーに(@)という形式があり、(@label)と書くことができる。 そして(@label)として参照できる。

(@) AAA
(@) BBB
(@C) CCC

(@C)の話しをしたい

結果

<ol class="example" type="1">
<li>AAA</li>
<li>BBB</li>
<li>CCC</li>
</ol>
<p>(3)の話しをしたい</p>

シンタックスハイライトニング

フェンスブロックで言語名を書けばよい。 一応、ユーザーズガイドにはないZshなんかも対応している。

```perl
while(<>) {
    if (/hello/) { print "world!\n"}
}
```

クラスとして言語が指定された場合もそれを認識する。

```{.ruby}
ARGF.each do |line|
  puts "world!" if line.include?("hello")
end
```

なお、対応している言語を指定したときだけsourceCodeというクラスが振られるようになっている。

コードに行番号をつける

ユーザーズガイドに記載されていない機能。

コードブロックにnumberSourceというクラスが設定されていると行番号をつける。 numberSourceをつけていなくても必要な情報自体はついているので、CSSを改変すれば必須ということもない。

```{.bash .numberSource}
for i in *
do
  sed "s/axe/sword/"
done
```

定義リスト

dtは普通に先頭からはじめて、dd側を:に続けてインデントする。

まずddが一行なのであれば、空行をあけずに書けば良い。

用語1
: 定義
用語2
: 定義

複数の段落に渡るような場合は空行をあける。 ddの最初の行は:にスペース3つ、以降はスペース4つ。

用語1

:   定義の段落1

    段落2

用語2

:   定義

ラインブロック

いわゆるVerb。

単に|ではじめるだけ。

| 改行と
|     スペースの
|   維持された
|  詩的な
|        文章を
|     書くことができる

リストにブロックレベルのコンテンツを含む

定義リストと同じように継続するものが4つのスペースではじまっていると、それは複数のブロックレベル要素を含むものとみなしてくれる。

このため、4つのスペースでコードブロックを表している場合、これをリストの一部だとみなしてしまう。

コメントをいれれば良い、とガイドにはあるのだが、これはHTML以外で困る。 タブを使えば解決するのだが、いくらなんでもスペースでインデントしてからタブを重ねるのは嫌という人もいるだろう。 であれば、フェンスブロックを使えば良い。

YAML front matter

Markdownの先頭にYAMLを置くことでメタデータを書くことができる。 title, subtitle, author, date, keywordsはofficialなもの。

---
title: ほげほげ
---

ほげほげほげほげ

テーブルキャプション

ユーザーズガイドに記載されていない機能。

方法その1。手前に:で始まる行を置く。

: これがキャプションになる

|title|price|
|-----|-----|
|ほげほげ|500|
|ふがふが|1000000|

もうひとつはTable:という行を後置する。

|title|price|
|-----|-----|
|ほげほげ|500|
|ふがふが|1000000|

Table: これがキャプションになる

コードブロックにキャプションをつける

captionという属性を書くとdata-captionが定義されるので、

pre:after {
  content: attr(data-caption);
  font-weight:bold;
}

とCSSに書いておけば良い。