
Я ищу простой способ верстки генеалогического древа в LaTeX.
В частности, меня интересует набор так называемого «Ahnentafel», то есть дерева, показывающего меня, моих родителей, моих бабушек и дедушек, моих прабабушек и прадедушек и т. д. Другими словами, это иерархическое дерево, в котором количество ветвей удваивается на каждом уровне.
Есть ли пакет, который может мне помочь? К сожалению,http://www.ctan.org/topic/genealogyпусто.
Я заметил несколько постов, рекомендующих TikZ для рисования деревьев. Я никогда не пользовался TikZ, и мне не хочется погружаться в него только для этой цели. Но если я должен, я должен.
РЕДАКТИРОВАТЬ:
Вот пример того, что я хочу создать:
Это Ahnentafel третьего поколения.
решение1
Вот еще один вариант использованияforest
чтобы проиллюстрировать некоторые другие его особенности:
\documentclass{standalone}
\usepackage{tabularx}
\usepackage{forest}
\usetikzlibrary{shapes.geometric}
% comment out the following four lines if the Helvet Neue font are not available:
\usepackage{fontspec}
\newfontfamily\namefont[]{Helvetica Neue Condensed Bold}
\defaultfontfeatures{Mapping=tex-text}
\setmainfont[Mapping=tex-text, Color=textcolor]{Helvetica Neue Light}
\definecolor{color1}{HTML}{FFCB73}
\definecolor{color2}{HTML}{FFA100}
\newcommand\Person[5]{%
{\namefont #1} \\
\begin{tabularx}{4.5cm}[t]{@{}r@{\hspace*{2pt}}X@{}}
b: & #2 \\
& #3 \\
d: & #4 \\
& #5
\end{tabularx}%
}
\begin{document}
\begin{forest}
delay={
for tree={
edge path={
\noexpand\path[\forestoption{edge}]
([xshift=-(6pt-1pt*level)].child anchor) to[out=180,in=0]
([xshift=(6pt-1pt*level)]!u.parent anchor)\forestoption{edge label};
},
if n=1
{fill=color1,shape=tape,tape bend bottom=none}
{if n'=1
{fill=color2,shape=tape,tape bend top=none}
{}
}
}
},
for tree={
line width=3pt,
inner sep=8pt,
draw=brown,
minimum size=1cm,
text width=4.5cm,
child anchor=west,
parent anchor=east,
grow=east,
l sep=2cm,
s sep=10pt,
draw,
anchor=west,
edge={line width=(18pt-3pt*level),line cap=rect,color=brown},
}
[\Person{Abraham /LINCOLN/}{12 Feb 1809}{Hardin (Larue), KY}{15 Apr 1865}{Washington, DC},fill=color2
[\Person{Nancy /HANKS/}{5 Feb 1784}{Campbell Co., Virginia}{5 Oct 1818}{Centryville, Spencer, Ind}
[\Person{Nancy /SHIPLEY/}{ABT 1745}{Pembroke, Wash, ME}{}{Amelia, Amelia, VA}
[\Person{Sarah Or Rachel}{ABT 1723}{}{}{}
]
[\Person{Robert /SHIPLEY/}{ABT 1719}{}{}{}
]
]
[\Person{Joseph /HANKS/}{ABT 1740}{Pembroke, Wash, ME}{}{Amelia, Amelia, VA}
[\Person{Sarah /EVANS/}{ABT 1714}{Pembroke, Wash, ME}{}{}
]
[\Person{John /HANKS/}{22 Oct 1709}{Pembroke, Wash, ME}{6 Sep 1742}{Pembroke, Wash, ME}
]
]
]
[\Person{Thomas /LINCOLN/}{20 Jan 1780}{Rockingham, VA}{17 Jan 1851}{Beechland, Co., KY.}
[\Person{Bethsheba /HERRING/}{1746}{Rockingham, Co., VA.}{}{}
[]
[]
]
[\Person{Abraham /LINCOLN/}{17 May 1744}{Berks, Co., Penn.}{1786}{Jefferson County, KY}
[\Person{Rebecca /FLOWERS/}{30 Mar 1720}{Berks, Co., Penn.}{1806}{Berks, Co., Penn}
]
[\Person{John /LINCOLN/}{3 May 1711}{Freehold, Monmouth, N.J.}{1778}{PA}
]
]
]
]
\end{forest}
\end{document}
Результат:
В этом решении края изогнуты так, чтобы напоминать дерево, а толщина ветвей автоматически уменьшается по мере увеличения уровня; также мужские и женские лица различаются путем выбора различных атрибутов для их узлов (форма, заполнение); все это делается при спецификации дерева.
Шрифт Helvet Neue
, использованный в моем примере, можно загрузить с сайтаrebba pocket
.
решение2
Недавно выпущенный пакет genealogytree вам поможет! В этом посте ранее упоминалась версия 0.10 alpha. Мне пришлось установить текущую версию вручную, поскольку текущий дистрибутив Latex заморожен до нового обновления.
Актуальный пример того, что можно сделать с пакетом:http://mirrors.ctan.org/macros/latex/contrib/genealogytree/genealogytree-example-2.pdf
Я не могу добавить MWE из этой картинки, так как сам не могу ее разобрать.
Вы можете найти пакет здесь:http://www.ctan.org/pkg/genealogytree
Из Руководства по пакету genealogytree для версии 0.90 (2015/05/22):
Диаграммы родословных и генеалогических деревьев являются проверенными инструментами для визуализации генетических и реляционных связей между людьми. Наименование математических древовидных структур с родительскими узлами и дочерними узлами заимствовано из исторических семейных диаграмм. Однако даже самая маленькая семейная сущность, состоящая из двух родителей и нескольких детей, не является математическим деревом, а представляет собой более общий граф. Пакет genealogytree предоставляет набор инструментов для верстки таких генеалогических деревьев или, точнее, для верстки набора специальных графов для описания структур, подобных семьям. Пакет использует алгоритм автоматической компоновки, который можно настроить, например, для приоритизации определенных путей.
решение3
Вы можете использовать forest
то, что я недавно научился использовать для древовидных диаграмм. Этот код обязан почти всемОтвет Гонсало Мединына мой вопрос об использовании forest
таким образом:
\documentclass[tikz,12pt]{standalone}
\usetikzlibrary{calc,positioning,backgrounds,arrows.meta}
\usepackage{forest}
\pagestyle{empty}
\begin{document}
\begin{forest}
for tree={
child anchor=west,
parent anchor=east,
grow=east,
draw,
anchor=west,
edge path={
\noexpand\path[\forestoption{edge}]
(.child anchor) -| +(-5pt,0) -- +(-5pt,0) |-
(!u.parent anchor)\forestoption{edge label};
},
}
[Me
[My Father
[My Father's Father
]
[My Father's Mother
]
]
[My Mother
[My Mother's Father
]
[My Mother's Mother
]
]
]
\end{forest}
\end{document}
решение4
Еще одно косвенное решение. Несколько лет назад я использовал программу LifeLineshttp://lifelines.sourceforge.netкоторый читает файл GEDCOM (попробуйте погуглить) и может создавать различные отчеты и деревья в формате LaTeX (и других тоже).
РЕДАКТИРОВАТЬВыше я добавил скан нескольких страниц вывода LaTeX.