マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

BXjscls がまた新しくなった(v1.1a)

W32TeXTeX Live では既に更新されている。

Pandoc モード

一番大きな追加機能がコレ。簡単にいうと、「Pandoc で日本語文書を LaTeX 形式(および PDF 形式)に変換する際の文書クラスとして BXJS クラスを利用する場合に最適化された設定」である。実際にはどちらかというと、

Pandoc の標準の latex テンプレートをを読みこんだ場合に、(日本語文書として)不都合なことが起こるのを事前に回避する設定を施した、特殊な standard モード

に相当する。だから基本的な(外から見える)機能は「標準設定」(standard 和文ドライバ)と同じである。

使い方

pandoc モードを使用する場合は、クラスオプションに pandoc を付ける。

\documentclass[pandoc,jafont=ipaex,a4paper]{bxjsarticle}

その他、クラスオプションの指定が“標準設定”とは若干異なる。

  • エンジンオプションは指定しない。エンジンは自動判定される(autodetect-engine に固定される)。
  • 和文ドライバも省略する。常に pandoc 和文ドライバが使われる(既に述べたように、機能的には standard 和文ドライバと同じである)。

もちろん、実際は「出力の TeX 文書の \docuemtnclass がこれになる」ように、適切に pandoc のコマンドオプションを組み立てる必要がある。(例を参照されたい。)

例えば次のような Markdown 文書を用意する。((なお、先頭にある % で始まる行は Pandoc 拡張 Markdown の「タイトルブロック」(title block)である。この機能(スイッチ pandoc_title_block)は既定で有効になっている。))

[sample.md]
% TeXに関する何か
% 某ZR

# TeXとは何か

TeXはアレ。

# TeXと☃の関係

☃「一切関係ありません」

これを「LuaLaTeX を経由、文書クラスは(Pandoc モードの)bxjsarticle、用紙サイズは A5 縦、和文フォント設定は ipaex」という設定で PDF 文書に変換する場合は以下のコマンドを実行する。((実際には一行で記述する。なお、少し古い版の Pandoc では用紙サイズ設定を「-V papersize=a5paper」と書く必要があるはずである。))

pandoc sample.md -o sample.pdf --latex-engine=lualatex
  -V papersize=a5 -V documentclass=bxjsarticle
  -V classoption=pandoc -V classoption=jafont=ipaex

出力の PDF 文書は以下のようになる(上下の余白を省いて示した)。

Pandoc で upLaTeX する件

Pandoc の「LaTeX を介した PDF 文書への変換」では、サポートするエンジンは pdfLaTeX、XeLaTeX、LuaLaTeX のみである。しかし、Pandoc では「LaTeX 文書に」変換することもできるので、その LaTeX 文書を (u)pLaTeX + dvipdfmx で PDF 文書に変換することは可能である。しかし元々 (u)pLaTeX が Pandoc のサポート外であるため、「LaTeX の標準のテンプレート」は (u)pLaTeX では普通は通らない。

ところが、BXJS クラスの Pandoc モードでは、「標準のテンプレート」が (u)pLaTeX でも通るように特別な調整がされている。従って、別のテンプレートを用意する必要がなくなる。

実際の例を挙げてみる。次のような日本語 Markdown 文書があったとする。*1

[yajasicp.md]
    • -
title: やる気のないSICP日本語訳 subtitle: SICPをマスターした貴方のために author: 某ZR date: あさって abstract: | 「えっ!? お前情報系なのに、 これまで1度もSICPを翻訳したことがないの!?」 と言われてついカッとなってやった。 完成は(全く)していない。 ... # SICPの第1章 アレです。 # SICPの第2章 そうアレです、もう解ってますね。 # 残り全部 SICPに書いてありましたね!

この Markdown 文書を「upLaTeX を経由、文書クラスは(Pandoc モードの)bxjsbook、用紙サイズは B5 縦、和文フォント設定は ipaex、章番号付き、目次付き」という設定で PDF 文書に変換する場合を考える。

まず以下のコマンドを実行して Markdown 文書を LaTeX 文書に変換する。(--chapters が必要なことに注意。 ((--chapters は「\chapter がある文書クラスを用いる」ことを知らせるオプション。LaTeX 標準の book クラスを指定した場合は自動的に補われるが、それ以外では明示する必要がある。ちなみに、-N は「章番号を付ける」こと、-s は「テンプレートを適用して完全な LaTeX 文書を出力する」ことを指示するオプション。)))

pandoc yajasicp.md -o yajasicp.tex -s -N --chapters --toc
  -V papersize=b5 -V documentclass=bxjsbook
  -V classoption=pandoc -V classoption=jafont=ipaex

この後はいつもの手順で LaTeX 文書を PDF 文書に変換できる。

uplatex yajasicp
uplatex yajasicp
dvipdfmx yajasicp

サブタイトル指定

\subtitle 命令でサブタイトルを設定できる。ここで設定されたテキストは \maketitle による表題出力において使用される。

「Pandoc のテンプレート」が \subtitle という命令を使用しているのでそれに対応させるのが主な目的である。ただし、Pandco モード以外でも \subtitle は利用できる。

例えば、先述の yajasicp.md の場合、出力の LaTeX 文書中には以下の行が含まれる。

\subtitle{SICPをマスターした貴方のために}

\jachar 命令

XeLaTeX + BXJS クラスで☃を含む文書を作ろうとする時、次のように単純に☃を書いただけでは出力されない。

\documentclass[xelatex,a5paper,ja=standard,jafont=ipaex]{bxjsarticle}
\begin{document}
{\TeX}と☃は一切関係ありません。あしからず。
\end{document}

一般に xeCJK(または zxjatype)を使った日本語文書で同じ事が起こる。この理由は、xeCJK の設定では〈☃〉は欧文として扱われるからである。今の場合、和文のフォント(IPAex明朝)は〈☃〉の字形をもっているが、欧文のフォント(Latin Modern Roman)は持っていないので、結果的に〈☃〉は出力されないのである。

和文・欧文扱いの制御」のサポートは将来真面目に考える必要があるテーマである。暫定的な解決手段として、BXJS クラスでは \jachar という命令を用意した。つまり \jachar{<文字1つ>} により、その文字が和文として(和文フォントで)出力される。(“標準設定”の時にのみ利用できる。)

\documentclass[xelatex,a5paper,ja=standard,jafont=ipaex]{bxjsarticle}
\begin{document}
{\TeX}\jachar{}は一切関係ありません。あしからず。
\end{document}

ちなみに、この \jacharアレForum の某投稿で言及されている(undocumented な)命令 \jsJaChar を名前を変えて公開にしたものである。((元の \jsJaChar は「\jachar が定義済ならそれと同じ、じ、未定義なら空になる」パッケージレベル公開命令という扱いになっている。))

*1:先頭にあるのは文書情報を記した「YAMLメタデータブロック」。