Asciidoctor で <br> 的なものを定義する


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[&#120601;]
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 を使いこなすと、太字・斜体を含めた入力を簡略化できる。ノートを取るのにも実用的な感じがしている。

参考

マクロの表

マニュアル見れば載ってるが、一応。