2019年12月8日

jlreq-satisfy

SATySFi Advent Calendar 2019の八日目です.昨日はna4zagin3さんでした.明日はbd_gfngfnさんです.

LaTeXにはjlreqという名前のクラスファイルがあるようです.そのSATySFi版を作りかけています.

LaTeXのjlreqとは?

W3C技術ノート「日本語組版処理の要件」(以下JLReq)の記述を実装しようとしているLaTeXのクラスファイルです.JLReqに複数の方式があると書かれている場合には,多くの場合にオプション等で調整ができるようになっているため,結果的に高いカスタマイズ性を持っています.

今回のSATySFi版jlreqは,このLaTeXのjlreqクラスファイルの機能を実装することを試みました.ただし,自分のSATySFiの理解不足などもあり多くの機能がまだできていません.(割注とかどうすんの…….)なので「作りかけ」です.

インストール

GitHubにある拡張子satyhのファイルを全部SATySFiのライブラリルート(デフォルトでは ~/.satysfi)にぶちこめばよいかと思います.なんかファイル多くてすみません.使う時は

@require: jlreq
とします.

クラスファイルとして

クラスファイルとしての使い方は標準のStdJaとかとあまり変わりません.ただし,document関数はオプションとして基本版面などの設定を受け付けられるようにしてあります.例えば

@require: jlreq
document(|
  title = {たいとる};
  author = {ああああ};
  date = {};
  show-title = false;
  show-toc = false;
|) ?:(|
    twoside = true;
    paper-size = A4Paper;
    horizontal-layout = HorizontalAuto;
    vertical-layout = VerticalAuto;
    header-sep  = ZW(1.0);
    header-height = ZW(1.0);
    font-size = 11pt;
    line-gap = 7pt;
    cjk-font = CJKFont-preset-ipaex(0.92);
    latin-font = LatinFont-preset-lmodern(1.0);
|) '<
% 中身……
>
のようにします.細かい中身はREADMEを見てください.ただし,現在のところ目次が実装されていないので,show-toc = true;としても目次は出ません.

文書内部で使えるコマンド類も似たような感じです.+p+pn+part+section+subsection+paragraph\ref\ref-page\footnote\figureがあります.

カスタマイズ

基本版面に関しては,上記のようにdocument関数のオプション引数で設定することができます.各種コマンドについては,***-schemeという関数が用意されているので,これを使ってコマンドを上書き定義することでカスタマイズできます.とっても現状可能なのは見出しと脚注だけです.例えば脚注に対しては,footnote-schemeというのが用意されているので,これを使って\footnoteを上書きします.具体的には

@require: jlreq

% 脚注用カウンターの定義
let-mutable ref-footnote-counter <- 0
% \footnoteの再定義
let-inline ctx \footnote = JLReqFootnote.footnote-scheme (|
  reference-mark-type = Interlinear;
  reference-mark-format = (fun n -> embed-string ((arabic n) ^ `)`));
  reference-mark-font = Roman(ZW(0.7));
  font = Italic(ZW(0.8));
  line-gap = ZW(0.7);
  indent = ZW(1.0);
  second-indent = Length(0pt);
|) ref-footnote-counter ctx

% 以下document関数を呼び出して文書を書く.
とすることで,脚注のスタイルが変わります.上記では,例えばreference-mark-type = Interlinear;としているので,合印が該当項目の真上に出力されます.またfont = Italic(ZW(0.8));としたので,脚注自身がイタリックで出力されます.その他はやはりREADMEを見てください.

ページスタイル

LaTeXのページスタイルに該当する機能を作ってみました.ページスタイルは

type pagestyle = (|
  odd-header : (context -> page-info -> block-boxes);
  even-header : (context -> page-info -> block-boxes);
  odd-footer : (context -> page-info -> block-boxes);
  even-footer : (context -> page-info -> block-boxes);
|)
のように定義されています.まぁみたまんまです.ここでpage-info(|page-number : int;|)です.プリミティヴpage-breakの第二引数に与えられる引数の型です.ページスタイルの設定はプリアンブル(documentの前)ではJLReqPageStyle.register-pagestyle-inline : pagestyle -> unitを使い
let () = JLReqPageStyle.register-pagestyle-inline ps
のようにします.もちろん,psはあらかじめ定義しておきます.文書中ではJLReqPageStyle.register-pagestyle : pagestyle -> inline-boxesを使い,例えばプリアンブルで
let-inline ctx \set-pagestyle ps = JLReqPageStyle.register-pagestyle-inline ps
のようにしておいて,文書中で
+p{ここでページスタイルの変更を行う.\set-pagestyle(ps);するとこのページからヘッダとかが変更される.}
とすることで変更します.ページスタイルは直接定義することもできますが,JLReqPageStyle.pagestyle-schemeでノンブルと柱を指定することで作成することもできます.詳細はやっぱりREADMEで.

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です