寻求对糟糕解决方案的改进——针对后代图表

寻求对糟糕解决方案的改进——针对后代图表

我找到了一个亟待改进的问题的解决方案。我正在编写一个家族史(我的)的第二版,其中包含大量后代图表。我拼凑了一种呈现它们的方法,但这是一个巨大的 PIA,我不得不相信有更好的方法!下面是一个 MWE,说明了代码的粗糙程度。我查看了 TikZ,希望有一些预滚动的东西,但没有找到任何可以修改为解决方案的东西。这很遗憾,因为我希望垂直线在明显的交叉点处相接,并且根据需要具有通向水平线的中点原点。

%%
%% chart1.tex -- The Original Immigrant
%%
\documentclass[letterpaper,12pt]{article}
\usepackage{soul}
\usepackage{booktabs}
\usepackage{rotating}
\usepackage[sc,osf]{mathpazo}
\newlength{\mysize}
\newcommand{\mycfs}[1]{\setlength{\mysize}{#1pt}%
  \fontsize{\mysize}{1.2\mysize}\selectfont}
\newcommand{\nemo}{\rule{4.5em}{0.4pt}}
\begin{document}
\setul{}{1pt}
\begin{table}[ht]
\caption{``\textbf{The Original Immigrant}''}
\vskip .5in
\mycfs{11}
\begin{sideways}
\begin{tabular}{c c c c c}
\multicolumn{5}{c}{\textbf{Pieter Myers}} \\
\multicolumn{5}{c}{c.1660--c.1725} \\
\multicolumn{5}{c}{\vrule} \\
\multicolumn{5}{c}{David Myers} \\
\multicolumn{5}{c}{c.1690--c.1760} \\
\multicolumn{5}{c}{\vrule} \\
\multicolumn{5}{c}{David Myers} \\
\multicolumn{5}{c}{\ul{c.1730--c.1790}} \\
\multicolumn{5}{c}{\vrule} \\
\cmidrule(l{3.49em}){1-1}\cmidrule(r{4.56em}){2-5} \\
% \cmidrule columns should be {2-N} where N ='s number of 'c's
\addlinespace[-1.5em]
% increase 0em till above \vrule then decrease
% as many \vrules as 'children' with enough white space to fit widest entry after...
\vrule & \vrule & \vrule & \vrule & \vrule \\
Henry Myers & Christian Myers & Samuel Myers & Daniel Myers & \textbf{Abram Myers I} \\
c.1752--c.1778 & c.1754--23 Aug 1799 & c.1755-- & c.1758-- & c.1760--c.1845 \\
& m. Charity \rule{4.5em}{0.4pt} & & & m. Mary C. Schell \\
& c.1755--19 Mar 1812 & & & \ul{1765--c.1855} \\
& & & & \vrule \\
& & & & David Myers \\
& & & & c.1770--1872 \\
& & & & Jonas Myers \\
& & & & 1795--1870 \\
& & & & Abram Myers II \\
& & & & 1795--1870 \\
& & & & Caroline Myers \\
& & & & 1800--1849 \\
& & & & Mary Myers \\
& & & & c.1805-- \\
& & & & John Myers \\
& & & & 1807--c.1879 \\
\end{tabular}
\end{sideways}
\end{table}
\end{document}

任何改进我都会欣然接受。如果能将某样东西变成一种风格,那就太棒了,但任何清晰度都是好的。

答案1

我认为 TikZ 仍然是您想要的,特别是它的树功能。TeX.sx 上有几个与家族树有关的问题,它们将为您提供可以做什么的提示。请查看连接家族树的两个分支我怎样才能改进 TikZ 中的这棵家谱?使用 PGF/TikZ 的家谱或家谱。 这TikZ-pgf 手册可在 CTAN 上获得(或可能已在您的 LaTeX 发行版中)。开始使用 TikZ-pgf 可能有点困难,但此站点上有许多示例可供学习。

答案2

受到 Peter Jansson 评论的启发,我立刻振作起来,开始读书。我特别看了tikz-qtree。下面显示的当然不是最好的解决方案,但它比我原来的方案好看得多,也更容易使用。与我的第一次尝试不同,这个方案帮我处理了大部分计算。唯一需要修改的是关卡深度,这肯定比以前更容易。所以它在这里:

%%
%% chart.tex -- test bed for descendent charting
%%
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\def\unknown{--------}
\def\circa{$^\approx$}
\begin{document}
\begin{figure}[h!]
\caption{``The Original Immigrant''}
\vspace{1.5em}
\centering
\begin{tikzpicture}
\tikzset{
  married/.style={
    append after command={
      (\tikzlastnode.south west) edge [very thick]
      (\tikzlastnode.south east)
    }
  }
}
\tikzset{execute at begin node=\strut}
\tikzset{level distance = 4em}
\tikzset{level 4/.style={level distance=2em}}
\tikzset{level 5/.style={level distance=6.5em}}
\tikzset{level 6/.style={level distance=5em}}
\tikzset{every tree node/.style={align=center,anchor=north}}
\tikzset{edge from parent/.style={
  draw,
  edge from parent path={
    (\tikzparentnode.south)
    -- +(0,0)
    -| (\tikzchildnode)
    }
  }
}
\Tree 
    [.{Pieter Myers\\\circa 1660---\circa 1725} 
    [.{David Myers\\\circa 1690---\circa 1760} 
    [.{David Myers\\\circa 1730---\circa 1790} 
      [
        [.{Henry Myers\\\circa 1752---\circa 1778} ] 
        [.{Christian Myers\\\circa 1754---23 Aug 1799\\m.Charity \unknown\\\circa 1755---19 Mar 1812} ] 
        [.{Samuel Myers\\\circa 1755---} ] 
        [.{Daniel Myers\\\circa 1758---} ] 
        [.\node[married]{\textbf{Abram Myers I}\\\circa 1760---\circa 1845\\m.Mary C. Schell\\1765---\circa 1855}; 
          [.{\\David Myers\\\circa 1770---1872\\[.5em]
          Jonas Myers\\1795---1870\\[.5em]
          Abram Myers II\\1795---1870\\[.5em]
          Caroline Myers\\1800---1849\\[.5em]
          Mary Myers\\\circa 1805---\\[.5em]
          John Myers\\1807---\circa 1879}
          ]
        ] 
      ] 
    ] 
  ]
] 
\end{tikzpicture}
\end{figure}
\end{document}

它有 62 行,比原版略长,但如果你考虑界面,大小差异就微不足道了。我仍然愿意改进,所以请尽情发挥吧!

相关内容