diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/familytree/doc-ja/ft-gens-ja.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/familytree/doc-ja/ft-gens-ja.tex | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/familytree/doc-ja/ft-gens-ja.tex b/Master/texmf-dist/doc/latex/familytree/doc-ja/ft-gens-ja.tex new file mode 100644 index 00000000000..b3784070cb3 --- /dev/null +++ b/Master/texmf-dist/doc/latex/familytree/doc-ja/ft-gens-ja.tex @@ -0,0 +1,305 @@ +\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 <http://www.gnu.org/licenses/>. +\fi + +\section{親子関係、二世代 (\texttt{ft-gens.dtx})} + +\DescribeMacro{\pcdef} +\cmd{\pcdef + \marg{new box name} + \marg{parent box name} + \marg{child box name} +} +\medskip + +親子関係(parent-child relationship)を定義する。 + +指定された\meta{parent box}と\meta{child box}を結線した新たなboxを +\meta{new box name}で定義する。 + +\meta{parent box}に指定できるのは、子へつながる線が一本だけのboxに限ら +れる。例えば、|\maleline|(相当)の属性を与え +|\indvdldef|で作成したboxである。 +また\meta{child box}に指定できるのは親へつながる線を持つboxに限られる。 +例えば、child markに|\biological|を指定した|\indvdldef|で作成したboxである。 + +|\pcdef|は次に挙げる|\gensdef|の簡易版である。 +\bigskip + +\DescribeMacro{\gensdef} +\cmd{\gensdef + \marg{new box name} + \marg{parent box name} + \marg{list of connection-pair} +} +\smallskip + +\cmd{connection-pair :=\\ +\hspace{4em}\marg{individual box name in the parent box}\\ +\hspace{4em}\marg{child box name} +} +\medskip + +二世代の関係(generations)を定義する。 + +\meta{connection-pair}とは、以下のものを組にしたものである。 + +\begin{enumerate} +\item + \marg{parant box}内の人物box名 +\item + \marg{child box}名 +\end{enumerate} + +この二つのboxの\meta{box name}|nameCY|同士を結線する。 +\smallskip + +\meta{child box}には、前述の|\pcdef|同様に、親へつながる線を(一本)持 +つboxしか指定できないが、\meta{parent box}には子へつながる線を複数 +持つものでも指定できる。どの線とどの\meta{child box}をつなぐかを指定す +るのが\meta{connection-pair}である。 + +作成したboxのchild markは親boxのそれに一致する。 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\clearpage +\subsection{例} + +\begin{enumerate} +\itemsep=\bigskipamount +\item +\srcfig{fig3Hidetada} + +\clearpage +\item +\srcfig{fig3Ietsuna} + +\clearpage +\item +上例二つをつなぐ手順を紹介しておく。 +\begin{enumerate} +\item +子から順に先祖を辿りながら定義する。すなわち、上例2の後に1を定義する。 + +\item +上例2に変更は不要である。 + +\item +上例1の + +\begin{lstlisting}[xleftmargin=1em] +\pcdef{秀忠親子}{秀忠}{秀忠の子} +\end{lstlisting} + +を + +\begin{lstlisting}[xleftmargin=1em] +\gensdef{家光家綱}{秀忠の子}{% + {家光}{家綱綱吉}% +} +\pcdef{秀忠家光}{秀忠}{家光家綱} +\end{lstlisting} + +へ変更する。 +\medskip + +すなわち +\textgt{\texttt{\textbackslash\kern0pt 秀忠の子}}box +内の人物box +\textgt{\texttt{\textbackslash\kern0pt 家光}} +と、上例2で定義済みの +\textgt{\texttt{\textbackslash\kern0pt 家綱綱吉}}box +をつなぎ、これを +\textgt{\texttt{\textbackslash\kern0pt 家光家綱}}box +とする。 + +\textgt{\texttt{\textbackslash\kern0pt 秀忠}}box +と親子関係を結ぶのはこの +\textgt{\texttt{\textbackslash\kern0pt 家光家綱}}box +である。 + +\item +新たに定義した +\textgt{\texttt{\textbackslash\kern0pt 秀忠家光}} +を描画する。 +\end{enumerate} + +紙面の都合上、横書きの結果のみ提示する。 +\end{enumerate} +\smallskip + +\noindent\includegraphics[scale=.95]{fig3IemitsuY.pdf} +\medskip + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{複数boxの定義、結線順序} +\label{sec:Lily1} + +兄弟姉妹boxとは複数の人物boxを同列に並べるものととらえるならば、 +それと直交する方向に並べるのが親子boxだ。 +同列に並んだ兄弟姉妹それぞれが子を持つならば、親子関係が複数になるので +単純に親子関係ボックスとは呼びづらく、二世代boxと呼ぶ方がふさわしい。 + +このような図の作成方法は二通り考えられる。親子関係を複数定義し、親同士を +兄弟姉妹boxでつなぐ方法と、逆に親世代の兄弟姉妹boxを先に定義してから、それぞ +れに子をつなぐ方法だ。 +この二つの方法を比較しながら、図の見やすさを考える。まず例を図示する。 + +\begin{enumerate} +\needspace{2\baselineskip} +\item +二組の親子関係を定義後、親世代の姉妹関係を定義する。 + +\srcfig{fig3Lily1} + +\needspace{3\baselineskip} +\item +姉妹関係を定義後、それぞれの親子関係を定義する。 + +\srcfig{fig3Lily2} +\end{enumerate} + +見て分かる通り、1の方法では子をつなぐ線の長さが異なり、更に子世代の位 +置も揃わなくなるため、見にくい図となる。 +これは子へつながる線はもっとも長いものに揃えるという|\sblngdef|の +機能が働かなかったためだ。|\sblngdef|の引数に渡された時点で既に +親子関係が定義されている状態であり、線の先には人物boxがつながれている。 +この状態で|\sblngdef|が強引に線を延ばすのはよろしくない。 + +一方、2の方法では|\sblngdef|の引数は|\indvdldef|されただけで他にはつながれていない +boxである。このため、上から長い線を描き足しても害は無い。既定義boxを改変 +しないまま、兄弟姉妹boxに閉じた範囲で同じ高さに線を上書きしている。 + +1の方法を採った場合でも線の長さを揃える方法はある。 +|\indvdldef|が持つ線長の増減機能を利用し、 +上図のLilyが持つ|\femaleline|(|\matrilineal|)の長さをPetuniaのそれと同 +じにすれば良い。 +PetuniaとLilyの名前の長さの差を求め、それを|\indvdldef|にオプションとし +て追加する。 +描画結果は上例2と同じである。 +\smallskip + +\srcfig{fig3Lily3} +\medskip + +|\nameboxcfg|には子をつなぐ線の長さを変更する機能があるので、これを使っ +ても同様の結果を得ることができる。しかし、|\indvdldef|する度に +|\nameboxcfg|するのは得策ではないだろう。|\nameboxcfg|はもっと広範囲に +適用する値を変更し、個別設定の回数を削減することを目的としており、 +|\indvdldef|の度に変更することは想定していない(できなくはないが)。 +個別に使用する値は|\indvdldef|のオプション引数を使用した方が簡便だろう。 +\bigskip + +もう一つの方法としてLilyの名前の長さをPetuniaのそれに揃える方法もある。 +この方法ではLilyの名前と線の間が空き、線の長さが揃う。 +\smallskip + +\srcfig{fig3Lily4} +\medskip + +Lilyの親子boxをPetunia親子boxとは違う場面で使用すると、名前の後ろが不 +自然に空き、おかしく見えることもあるかもしれない。その場合は、空き具合 +を変化させたLily boxを複数定義し使い分けることになるだろう。 +\bigskip + +boxの定義順序、言い換えれば配置\jslash 結線順序には注意が必要だ。 +本パッケージでのbox定義とは与えられた複数のboxを並べ線でつなぐものだが、 +その際に与えられたboxの大きさを考慮する。例えば兄弟姉妹boxを定義する際、 +既に子孫とつないだboxを与え、そのboxの幅(または高さ)が増加していれば、 +兄弟姉妹の間隔を拡げる。すなわちinterval boxによる間隔挿入が必要になる +のは末端の関係定義だ +けになる。しかし、兄弟姉妹boxを定義した後で子とつなげる場合は、この +間隔調整機能が発揮されない。隣り合う子boxの幅(または高さ)が広ければ、 +重なってしまうだろう。この場合は手動でinterval boxを挿入せざるを得ない。 + +接続ポイントは\meta{box name}\meta{brabra}|nameCY|などの名前で定義され +た座標で +ある。前章までで説明したように|\sblngdef|は兄弟姉妹それぞれの名前の中 +心を表すY座標を定義するが、nestした場合にnest内部までは定義しない。す +なわち親子boxに配置された人物boxへ線をつなげるのは(ほぼ)自動的にでき +るが、親子box内の兄弟姉妹boxに配置された人物boxへ線をつなげるには、ユー +ザが自分で座標を算出しなければならない。不可能ではないが、手間はかかる。 +この手間を回避するため、世代は下から順に定義\jslash 結線していくのが良いと考える。 +\iffalse +\bigskip + +最終的に、 +ユーザがどのような図を欲するにより、どの順序でboxを定義し、つなげるか、 +また調整をどう加えるかを決定するのが良い。 +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\iffalse +% \subsubsection{二世代box --- core} +% +% \iffalse +% \parag{カスタマイズ} +% +% \DescribeMacro{\ftgescfg} +% \NoDescription +% \begin{macrocode} +% \newcommand{\ftgenscfg}[1]{% +% } +% \end{macrocode} +% \fi +% +% \parag{connection pair} +% +% \DescribeMacro{\ft@getpair} +% 引数からconnection-pairを取り出し、 +% 親box内の接続点を|\ft@cpoint|として、また子box名を|\ft@kids|として定義する。 +% 接続点に与えられたものが親box内でnestして配置された場合にも対応する。 +% しかしnestは一段までしか対応しない。 +% +% \parag{上余白} +% +% \DescribeMacro{\def@calc@xtop} +% 親boxに必要な上余白を算出し、指定されたglobalな名前で定義する。 +% +% \parag{下余白} +% +% \DescribeMacro{\ft@calc@xbottom} +% 親boxに必要な下余白を算出し、指定されたglobalな名前で定義する。 +% 同時に|\ft@depth|も定義する。 +% +% \parag{box size算出} +% +% \DescribeMacro{\ft@gens@size} +% box sizeを算出する。 +% +% \parag{配置} +% +% \DescribeMacro{\ft@gens@layout} +% 親boxと子boxを配置する。 +% 配置した親boxの|nameCY|座標を\meta{box name}|nameCY|とする。 +% 配置した子boxの原点(左下、縦書きならば中央上)を\meta{box +% name}\meta{\kern0pt 子box name}|Y|として定義する。 +% 本package自身では不要の座標だが、ユーザが必要とするかもしれないので。 +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsubsection{二世代box --- interface} +% +% \DescribeMacro{\ftgensdef} +% boxのchild markは親boxのそれに一致する。 +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \subsubsection{親子box --- interface} +% +% \DescribeMacro{\ftpcdef} +% 親子関係boxを定義する。 +% |\gensdef|の簡易版。 +% 親box、子boxそれぞれの\meta{box name}|nameCY|同士を結線する。 +\fi |