summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/familytree/doc-ja/ft-gens-ja.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/familytree/doc-ja/ft-gens-ja.tex')
-rw-r--r--macros/latex/contrib/familytree/doc-ja/ft-gens-ja.tex305
1 files changed, 305 insertions, 0 deletions
diff --git a/macros/latex/contrib/familytree/doc-ja/ft-gens-ja.tex b/macros/latex/contrib/familytree/doc-ja/ft-gens-ja.tex
new file mode 100644
index 0000000000..b3784070cb
--- /dev/null
+++ b/macros/latex/contrib/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