我找到了一个亟待改进的问题的解决方案。我正在编写一个家族史(我的)的第二版,其中包含大量后代图表。我拼凑了一种呈现它们的方法,但这是一个巨大的 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 行,比原版略长,但如果你考虑界面,大小差异就微不足道了。我仍然愿意改进,所以请尽情发挥吧!