Asciidoctor で 属性と Passthrough を使いこなす
passマクロを色々試していたら、自己解決。なんで用意されていないのか分かった。標準機能で普通に実現できるから。
:br: pass:p[ +]
a{br}b
結果のイメージ(AsciiDocが使えないのでMarkdown記法で結果を再現)
a
b
解説
- pass:[~] は入力されたものを加工せずに出力する。
- p は Post Replacements の略。Post Replacementsは[~]のテキスト中に
+
を見つけると、改行に置き換える。(この記法、実はpdfでもうまくいく。) - pass:q,p,...[~]は、「~」で書式適用、改行置換などを適用したテキストを、そのまま出力する。
passマクロの応用例
PDF向けには画像を出して、HTML出力向けにはフォントを使う。
image は macros でマクロを置換してから、passすれば良い。
ifeval::["{backend}" == "html5"]
:phi: pass:r[𝜙]
endif::[]
ifeval::["{backend}" == "pdf"]
:phi: pass:macros[image:U03D5_phi_straight.svg[]]
endif::[]
{phi}
そもそも、PDFはいらない子という話はあるかもしれないが、アイコン等を埋め込んだ文書を作るには良いのかもしれない。
HTMLタグを埋め込む
ルビを入れることもできる。PDFは無理。
この例は、pass 指定しないと、 AsciiDoc 文書と思われて、&や<>などの記号が通常の文字に置換されてしまう。pass指定で、生のHTMLをそのまま出力できる。
ifeval::["{backend}" == "html5"]
pass:[<ruby><rb>hello world</rb><rp>(</rp><rt>こんにちは世界</rt><rp>)</rp></ruby>]
endif::[]
こういうのは、属性とあわせて使うと力を発揮するものと思われる。
ただ、外道(道を外れた使い方)ではある。こういうのに頼らずに済めばよいのだが、まずは出来ることが重要。
太字のマークアップ付きの属性を定義する
q は quote の略。太字/斜体(slant?)/オーバーライン/アンダーラインなど、マークアップを変換した後、passthrough する。html的に言うと、 Z
--quote--> <strong>Z</strong>
--pass--> <strong>Z</strong>
という感じで適用される。
:ZZ: pass:q[**Z**]
{ZZ}
一旦メモしたものを少し加工して見栄えを良くする。
ノートを取った直後
----
i j
1 2 3 4 5 6
1 2 3 5 4 6
1 2 5 3 4 6
1 5 2 3 4 6
1 5 2 3 4 6
1 5 3 2 4 6
1 5 3 4 2 6
^ ^
----
強調したい場所にマークアップを入れる
[subs="quotes"]
----
i j
1 2 3 4 *5* 6
1 2 3 *5* 4 6
1 2 *5* 3 4 6
1 *5* 2 3 4 6
1 5 *2* 3 4 6
1 5 3 *2* 4 6
1 5 3 4 *2* 6
^ ^
----
おわりに
AsciiDocって attribute を使いこなすと、太字・斜体を含めた入力を簡略化できる。ノートを取るのにも実用的な感じがしている。
コメント