2017年2月20日

jlreq.clsは,pLaTeX/upLaTeX利用時には紙サイズを設定しない.さぼっているわけではなく,dviwareに関わることはしたくなかったという理由である.といっても紙サイズに関しては実質的にdviwareによらない方法が存在すると言っても間違ってはいないとは思うけど.まぁiNOUE Koich!さんのbounddviパッケージで紙サイズが設定されるようなので,そっちを呼んでもらえればよいかと思う.

もう一つ,割とみんなやっているけどやりたくないこととして,各パッケージへの個別の何か.あのパッケージを読み込むとバグるとかそういうやつ.対象にしたパッケージのその後に責任持たないとならなくなるし…….え,現在の\AtEndOfPackageFile*{amsthm}とか書いてあるのは何かって?まぁあれは特別扱いということで…….(単に自分が使いまくる範囲なので利便性のためだというのが本音…….)

2017年2月16日

\maketitleabstract環境の件は,abstract環境がプリアンブルにあれば\maketitleとともに出力,そうでなければその場に出力というようにした.なんかわかるようなわからないようなって感じだ…….二段組の場合は,\maketitleは一段組で出るので,abstract環境がプリアンブルにある場合は概要も一段で出る.

2017年2月15日

arXivのTeX Liveが無事2016にあがったようだ.これで論文を出すのに何の障害もなくなった.まぁ出す論文がなければ何にもならないんだけど…….

2017年2月14日

今年度は何人か北大の数学関係の方が定年退職される.今日はその最終講義.

2017年2月13日

abstract環境がぼろぼろだった…….直した.

ところで\maketitleabstract環境ってどっちが先なんですかね.ずっと\maketitleだと思っていたのだけど,amsartだとむしろabstract環境を先にしないとならない.jsarticleだとどっちを先におくかで挙動が変わる.

  • 二段組で\maketitleが先:二段組みになった本文の頭に概要が入る.
  • 二段組でabstract環境が先:概要が一段組でタイトル直後に入る.
  • 一段組で\maketitleが先:いつもの.
  • 一段組でabstract環境が先:概要が最初のページを占有する.
ちなみにjarticleの方は一段組は同じ,二段組は一段組ににた感じの挙動.jlreq.clsでは,一段組の場合はどっちを先に書いてもあまり変わらない感じに,二段組の場合はjsarticleと同じ感じにしてみた.

2017年2月12日

いろいろとkeyval形式でカスタマイズができる,というのは(副産物的ではあるけど)jlreq.clsの便利そうな点になっている.しかし行き当たりばったりでkey名を決めたりしているので,これでいいのかどうか…….ちと失敗したかなぁと思うのが,

\jlreqsetup{
  sidenote_mark={
    mark=<文字列>,
    headingfont=<命令>
  }
}
の部分.ここで入れ子構造を入れてしまった…….そうすると,全体的に入れ子を導入して,例えば
\documentclass[sidenote={
  width=<寸法>,
  type=[number/mark]
}]{jlreq}
とすべきだったのではないかと思い始めてしまった.しかし入れ子が深くなると利便性の観点ではマイナスかと思うので,上のsidenote_markを展開して,sidenote_marksidenote_headingfontの二つにしようかしら.

ちなみにこの各種設定,ドキュメントにないものが結構ある.正式仕様に格上げされる可能性もあるし,消え去る可能性もある.20170208ではバグっていたりするのもある.

クラスオプションa4paperなど

jarticleとかの互換性のために残してあります.paper=a4と同じでそっちを使うこと推奨.11ptとかもある.

クラスオプションfootnotetext_indent=[one/two]

脚注のインデントを指定します.4.2.5.dの図4.72を切り替えます.ドキュメントにないのは「one/two」というvalueがさすがにどうかと思うのだが,他のが思いつかないから.

\DeclareBlockHeadingの設定内
  • label_format: ラベルのフォーマット指定.\chapterが第1章とかなるのはこれを使っている.たぶんすぐに正式仕様になる.
  • subtitle_format: 副題のフォーマット指定.#1が副題自身に置き換わる.
  • fomart: 見出し全体のフォーマット.#1がラベルに,#2が見出し文字列に,#3が副題に変わる.対応するものがない場合は空になる.
  • pagetop_space: 見出しがページの頭にくると,before_linesで指定されたアキは入らないようにしています.pagetop_spaceが入ると常に入るようになる.オプション名を悩んでいる.
\DeclareCutinHeadingの設定内

markで見出し文字列の前に何か入れることができます.jsarticleの\paragraphで頭に■が出るけど,ああいうやつ.

\DeclareCutinHeadingの設定内

afterindentで見出しの後のインデント量を指定できる.……どう見ても直後の文のインデントをするか否かに見える設定名なので後で変更する.after_spaceとか?

\DeclarePageStyleの設定内
  • mark_format: 柱のフォーマット.例えば_chapter={第\thechapter 章\quad #1}とすると\chaptermarkがこれに従い定義される.
  • command: \ps@***の一番最後に実行される.
  • gap: ノンブルと柱を同じ場所においた時に,その間の距離.
  • no_clear_mark: デフォルトでは\ps@***の一番最初に\sectionmarkとかを全部\@gobbleにするようにしているのだが,これをしないようにする.

2017年2月11日

同じくjlreq.clsに次のようなマクロがある.

\jlreq@ifempty{<トークン列>}{<実行1>}{<実行2>}

これは<トークン列>が空ならば<実行1>を,そうでなければ<実行2>になる.e-TeX拡張が使える場合(jlreq.clsはこれを仮定している)は,このマクロの定義は

\long\def\jlreq@ifempty#1{%
  \expandafter\ifx\expandafter\relax\detokenize{#1}\relax
  \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
とするのが最善手だ.

としてもおもしろくないので,ここでは通常のTeXで考えてみる.よく見るのが

\def\jlreq@ifempty{%
  \ifx\jlreq@uniqtoken#1\jlreq@uniqtoken
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}
だけど(かなり長いことこれにしていた)これはやっぱり\jlreq@ifempty{\iftrue\fi}で破綻する.というかした.

ともかく「最初のトークンだけ取り出す」マクロが作れればよいので,昨日のを少し応用して

\def\A#1#{\B#1\Y\Z}
\def\B#1#2\Z#3\Z{#1}
というマクロを考えて,\A#1\X{}\Zという形のマクロを考えてみる,これを二回展開すると次のようになる.#1における{***}の前までをS,その後をTとすると,
  • Tが空でないならば,\A ST\X{}\Z\B S\Y\Z T\X{}\ZS\Yの先頭
  • Tが空ならば,\A S\X{}\Z\B S\X\Y\Z{}\ZS\X\Yの先頭
となる.言い方を変えると,#1の先頭トークンが得られていることになる.ただし先頭が{の場合は\Yが,また#1が空の場合は\Xに展開される.

これを使って(マクロ名を変更して)次のようにしてみた.

\def\jlreq@getfirsttoken#1#{\jlreq@getfirsttoken@#1\bgroup\jlreq@endmark}
\def\jlreq@getfirsttoken@#1#2\jlreq@endmark#3\jlreq@endmark{#1}
\long\def\jlreq@ifempty#1{%
  \expandafter\expandafter\expandafter\ifx\jlreq@getfirsttoken#1\jlreq@uniqtoken{}\jlreq@endmark
  \jlreq@uniqtoken
   \expandafter\@firstoftwo
  \else
   \expandafter\@secondoftwo\fi}
前のと対応させると,\X\jlreq@uniqtoken\Y\bgroup\Z\jlreq@endmarkである.これで大体うまく行くと思う.まぁ空白トークンは闇に消えますが.