\iffalse Copyright 2022 Jiro Senju This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package. If not, see . \fi \section{人物 (\texttt{ft-individual.dtx})} \DescribeMacro{\indvdldef} \cmd{\indvdldef \oarg{child mark} \marg{new box name} \oarg{title} \marg{individual name} \oarg{additonal info} \oarg{maleline xlength} } \medskip 与えられた情報を整形\jslash 配置したboxを、指定された\meta{new box name}で定義する。 \begin{enumerate} \item \oarg{child mark} \par 人物名の前に描く線の種別を指定する。 後述する|\ftbiological|、 |\ftadopted|、 |\fttop|、 |\ftblank| のいづれかを指定する \item \marg{new box name} \par 定義するbox名。 \CS ではない (baskslashを付けない) \item \oarg{title} \par 肩書き \par 人物名の肩に二回り小さなサイズ(|\relsize{-2}|)で配置される \item \marg{individual name} \par 人物名 \item \oarg{additonal info} \par 付加情報 \par 生没年、別名等、任意の情報を追加できる。 人物名の次段に一回り小さなサイズ(|\relsize{-1}|)で配置される。 更に後述する |\ftmaleline| (|\ftfemaleline|, |\ftpatrilineal|, |\ftmatrilineal|)、 |\fthaschild|、 |\ftprivate| の属性も指定できる \item \oarg{maleline xlength} \par 人物名から子への線を描く場合 (図に婚姻関係を含めない場合)、 線の長さを増減する。 但し、後述する兄弟姉妹box内では自動的に調節されるため、 意味を失う。 \end{enumerate} 更に後で使用する座標(単位は|pt|)を表す\CS も定義する。 要素(人物名)に関する座標の原点はそれぞれ、 横書きの場合はbox左下、 縦書きの場合はbox左上である。 \begin{itemize} \item \meta{box name}|nameX| \par 配置した人物名の末尾 \item \meta{box name}|nameCX| \par 配置した人物名の幅の中央 (縦書きならば高さの中央) \item \meta{box name}|nameCY| \par 配置した人物名の高さの中央 (縦書きならば幅の中央) \end{itemize} \bigskip \needspace{4\baselineskip} \oarg{child mark}には次の値のいづれかを指定する。 \begin{itemize} \item |\biological|, |\ftbiological| \par 人物名の前に実子を意味する実線を描く。 \item |\adopted|, |\ftadopted| \par 人物名の前に養子を意味する二重線を描く。 \item |\fttop| (|\top|) \par 線を描かない。系図の最上位に用いる。 \item |\blank|, |\ftblank| \par 線を描かない代わりに、同じサイズの空白を挿入する。後述する |\mrrgdef|に指定する配偶者などの定義時に使用する。 \end{itemize} \bigskip \oarg{additonal info}には次の属性を含められる。 \begin{itemize} \item |\haschild|, |\fthaschild| \par 子をもうけた配偶者を表す。 \par 後述する婚姻関係定義に使用すると、婚姻 関係を意味する二重線から直角に実線を描く。 \item |\private|, |\ftprivate| \par 法的な婚姻関係ではないことを表す。 \par 後述する婚姻関係定義に使用する と、婚姻関係を意味する二重線を点線にする。 \item |\maleline|, |\ftmaleline| \par 婚姻線を描かず人物名から子への線を描く。 \par 線の長さはオプション引数\meta{maleline xlength}で加減できる。 |\ftfemaleline|、 |\ftpatrilineal|、 |\ftmatrilineal|と同義。 \end{itemize} \bigskip 作成するboxの中身は細分化されたboxである。 \smallskip \begin{itemize} \item 肩書きを表す|\ft@titlebox| \item 人物名を表す|\ft@namebox| \par 内部には更に\meta{child mark}を表す|\ft@cmarkbox|、 \meta{maleline}を表す\allowbreak|\ft@malelinebox|がある。 \item 付加情報を表す|\ft@optbox| \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{カスタマイズ} 配置を調整する機能もある。 変更しないものには空を指定すれば良い。 大したことはしていないので必要に応じ参照\jslash 使用する程度で良い。 引数等詳細は実装を参照のこと。 \medskip \needspace{1.5\baselineskip} \DescribeMacro{\nameboxcfg} \cmd{\nameboxcfg \marg{space from the child mark} \marg{font} \marg{space to the maleline} \marg{maleline length} } \smallskip \DescribeMacro{\cmarkboxcfg} \cmd{\cmarkboxcfg \marg{space between two lines, for adopted} \marg{line length} } \smallskip \DescribeMacro{\titleboxcfg} \cmd{\titleboxcfg \marg{indent} \marg{font} \marg{linestretch} \marg{vspace to the individual name} } \smallskip \DescribeMacro{\optboxcfg} \cmd{\optboxcfg \marg{vspace from the individual name} \marg{indent} \marg{font} \marg{linestretch} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{例} \begin{enumerate} \itemsep=\bigskipamount \item \srcfig{fig1base} \item \srcfig{fig1Ieyasu} \item \srcfig{fig1Hidetada} \end{enumerate} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \iffalse \subsectImpl \subsubsection{child-mark box} \parag{カスタマイズ} \DescribeMacro{\ftcmarkboxcfg} \DescribeMacro{\cmarkboxcfg} child markを配置したboxを生成する際に使用する |\adopted|の二重線の間隔、 線の長さ をカスタマイズできる。 変更しないものには空を指定すれば良い。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{box生成} \DescribeMacro{\fttop} \DescribeMacro{\top} \DescribeMacro{\ftbiological} \DescribeMacro{\biological} \DescribeMacro{\ftadopted} \DescribeMacro{\adopted} \DescribeMacro{\ftblank} \DescribeMacro{\blank} child mark種類。 それぞれの意味は\refnm{table:cmark}を参照。 \DescribeMacro{\ft@indvdl@nameH} \DescribeMacro{\ft@indvdl@nameD} \DescribeMacro{\ft@indvdl@nameCY} \DescribeMacro{\ft@do@cmarkdef} \DescribeMacro{\ft@cmarkdef} 指定された\meta{cmark}を持つboxを、\meta{cmarkbox-name}に指定された名前で生 成する。 罫線文字を使うことも検討したが、fontが異なるとつながらなくなる恐れがあ るため|picutre|の|line|にした。 |\ft@indvdl@nameH|、|\ft@indvdl@nameD|、|\ft@indvdl@nameCY|はinterface である|\indvdldef|が初期化する。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{付加情報box} \parag{カスタマイズ} \DescribeMacro{\ftoptboxcfg} \DescribeMacro{\optboxcfg} 付加情報\meta{additional info}を整形\jslash 配置した|\ft@optbox|を生 成する際に使用する、 人物名との距離、 字下げ量、 font、 linestretch をカスタマイズできる。 変更しないものには空を指定すれば良い。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{属性と付加情報の解析} \DescribeMacro{\ftmaleline} \DescribeMacro{\maleline} \DescribeMacro{\fthaschild} \DescribeMacro{\haschild} \DescribeMacro{\ftprivate} \DescribeMacro{\private} 属性。 それぞれの意味は\refnm{table:attrib}を参照。 \DescribeMacro{\ft@optlist} \meta{option-list}に指定された付加情報\meta{additional info}から属性を取り出し、 \meta{box-name}を基にした名前のglobal flagを定義する。 属性以外のものは後で印字するため、 別リスト\meta{list}を生成する。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{box生成} \DescribeMacro{\ft@opt} 付加情報\meta{additional info}を整形\jslash 配置した|\ft@optbox|を生 成する。 先頭には\meta{child-mark}分に加え、 人物名からindentするための余白を挿入する。 最終行のdepthをboxのdepthとする。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{人物名box} \parag{カスタマイズ} \DescribeMacro{\ftnameboxcfg} \DescribeMacro{\nameboxcfg} 人物名に使用する、 字下げ量、 font、 人物名の後にmalelineを描く場合の人物名との距離、 および線の長さ をカスタマイズできる。 変更しないものには空を指定すれば良い。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{box生成} \DescribeMacro{\ft@name} 人物名を整形\jslash 配置した|\@ft@namebox|を生成する。 中身は|\ft@cmarkbox|、\meta{individual-name}、 |\ft@malelinebox|を並べたもの。 malelineを描く場合、defaultのlength、というか線の始点をどう決定するか を仲々決められなかった。 始点を単に人物名の後ろとするか、それとも肩書きと付加情報も含め、一 番大きなboxの後ろを始点とするか。後者にすると人物box単独での見た目は良 くなる。すなわち常にmalelineを一番長くさせられる。しかし、後述する他の 兄弟姉妹boxなどと並べる時に、線をどれだけ延ばせば他のboxと揃えられるか を算出するのに手間がかかるようになる。 この点は前者の方に分があり、単に人物名のsizeの差だけを増 加させれば揃えられる。 試行錯誤の後、始点は前者とし、default lengthは |\ft@namebox@maleline@length|とする。 すなわち、人物boxを単独で用いる場合、肩書きや追加情報の方がmalelineよ りも長くなることがあり得る。 後で兄弟姉妹\jslash 親子\jslash 婚姻関係作成時に座標として利用できるよう、 \meta{box name}|nameX|、\meta{box name}|nameCX|を定義する。 人物boxのdepthは人物名のそれに一致させる。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{肩書きbox} \parag{カスタマイズ} \hyphenation{line-stretch} \DescribeMacro{\fttitleboxcfg} \DescribeMacro{\titleboxcfg} 肩書きを配置した|\ft@titlebox|を生成する際に使用する 字下げ量、 font、 linestretch、 人物名との距離をカスタマイズできる。 変更しないものには空を指定すれば良い。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{box生成} \DescribeMacro{\ft@title} 肩書きを整形\jslash 配置した|\ft@titlebox|を生成する。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{boxの連結 --- core} 指定された情報を基に、 肩書き(|\ft@titlebox|)、人物名(|\ft@namebox|)、付加情報 (|\ft@optbox|)それぞれを作成する。 それらを並べ人物boxを生成する。 boxのdepthは最終行のそれに一致させる。 後で兄弟姉妹\jslash 婚姻\jslash 親子関係作成時に座標として利用できるよう、 \meta{box name}|nameCY|を定義する。 各boxの生成、人物boxのsize算出、|picture|によるlayoutの三段階を踏む。 それぞれを独立させ定義するが、\IhadtoSplit %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{各boxの生成} \DescribeMacro{\ft@indvdlbox@gen} \NoDescription \begin{macrocode} \end{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{人物boxのsize算出} \DescribeMacro{\ft@indvdlbox@calc} \NoDescription \begin{macrocode} \end{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{\texttt{picture}によるlayout} \DescribeMacro{\ft@indvdlbox@layout} \NoDescription \begin{macrocode} \end{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parag{box連結のmain} \DescribeMacro{\ft@indvdlbox} \NoDescription \begin{macrocode} \end{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{人物box --- interface} \DescribeMacro{\ftindvdldef} \DescribeMacro{\indvdldef} 指定された情報に従い、 \meta{box name}という名前のboxを生成する。 \meta{individula name}だけの高さ|\ft@indvdl@nameH|を求め、 更にdepthも考慮した中点を|\ft@indvdl@nameCY|に定義し、 以降の接続点の座標算出に用いる。 \meta{child mark}は人物boxの先頭に置き、 全ての行はlayout的にその存在を意識する必要があるため、 他の項目よりも先に決定し、 |\ft@cmarkbox|、 およびその幅を表す|\ft@cmarkW|を定義する。 \meta{cmark}が|\ftblank|以外の場合は、 child-markが存在することを表すglobal flagを \meta{containerbox-name}に指定された名前を基に定義する。 |\ft@optlst|により\meta{additional info}を解析し、 属性を除いたものを|\ft@indvdl@opts|にまとめる。 同時に|\ifft@maleline|を設定し、 属性に|\maleline|が指定されているか否かを以降判断できるようにする。 ここまでの前処理を済ませた後|\ft@indvdlbox|により人物名boxを生成する。 \fi