我想用 XeLaTeX 格式化语言树。
问题是如何平衡它以使其适合页面宽度。
等宽字体
使用等宽字体时,它看起来如下所示。它适合页面宽度。
```` 表 1:尼日尔-刚果语系的巴萨里语
Niger-Congo
|
|
Atlantic-Congo
|
|
Volta-Congo
|
|
...................................................................................
| | | | |
|
Kru (New) Kwa (New) Benue-Congo Dogon(?) North Volta-Congo
|
.......................
| |
(Central) Gur Adamawa-Ubangi
|
|
|
........................................................
| |
North South
| |
| |
.................................... ...........................................
| | | | |
Oti-Volta Bwamu Kurumfe Grunsi Kirma/Tyurama Dyan (etc.)
---------
|
|
....................................................................................
| | | | |
Buli/Konni Eastern Western Gurma Yom/Naudem
-----
|
|
...........................................................................................
| | | | | |
Ncham/Bassari Akasele/Chamba Konkomba, many dialects Gangam/Dye Gurma Moba(Moore Gurma, Bimoba)
````
2. LaTeX 代码
完整的 XeLaTeX 文件
\documentclass[a4paper, 11pt]{article}
\usepackage{comment} % enables the use of multi-line comments (\ifx \fi)
\usepackage{lipsum} %This package just generates Lorem Ipsum filler text.
\usepackage{fullpage} % changes the margin
\usepackage{graphicx}
\usepackage{forest}
\usepackage{tikz-qtree}
\begin{document}
\section*{Language tree Ntcham}
\begin{tikzpicture}
\tikzset{edge from parent/.style={draw,edge from parent path={(\tikzparentnode.south)-- +(0,-8pt)-| (\tikzchildnode)}}}
\Tree [.Niger-Congo
[.Atlantic-Congo
[.Volta-Congo
[.Kru ]
[.North
[.Gur
[.Senufo ]
[.Central
[.North
[.Bwamu ]
[.Kurumfe ]
[.Oti-Volta
[.Buli/Konni ] [.Eastern ] [.Western ]
[.Gurma
[.Ntcham/Bassari ]
[.Akasele/Chamba ]
[.Konkomba, many dialects ]
[.Gangam/Dye ]
[.Gurma ]
[.Moba(Moore Gurma, Bimoba) ]
]
[.Yom/Naudem ]
]
]
]
[.South [.Grusi ] [.Kirma/Tyurama ] [.Dyan (etc.) ]
]
]
]
[.Adamawa-Ubangi ]
]
[.Kwa ]
]
] ]
\end{tikzpicture}
\section*{Description}
\lipsum[3]
\end{document}
3. 格式化
树太宽
4. 问题
使用的软件包是
\usepackage{graphicx}
\usepackage{forest}
\usepackage{tikz-qtree}
- 这是正确的组合吗?
- 我如何使用这个包来移动树枝以便整棵树能够合适?
答案1
您可以像我在第 1 页中那样将其缩小,但出于易读性考虑,我不建议这样做。但在第 2 页,我将其显示为,sidewaysfigure
这似乎更合理(最终大小为 的 1.05 倍\small
)。
已编辑,以便使用 挤压表格条目,以便将\sq{}
左端或右端条目自行关闭(例如 Kru、Senufo、Yom/Naudem、Adamawa-Ubangi 和 Kwa),\sql{}
将条目放在拥挤的行左侧(例如 Bwamu、Buli/Konni、Ntcham/Bassari 和 Grussi),将条目放在拥挤的行右侧(例如 Moba(...)、Dyan 和(等))。通过使用这些宏,我能够将树重新缩放到比其自然状态大约大 66% 的比例,即使用 时\sqr{}
大小的 1.05 倍。\small
sidewaysfigure
\documentclass[a4paper, 11pt]{article}
\usepackage{comment} % enables the use of multi-line comments (\ifx \fi)
\usepackage{lipsum} %This package just generates Lorem Ipsum filler text.
\usepackage{fullpage} % changes the margin
\usepackage{graphicx}
\usepackage{forest}
\usepackage{tikz-qtree}
\usepackage{rotating}
\newsavebox\mytree
\newcommand\sq[1]{\makebox[0pt]{#1}}
\newcommand\sql[1]{\setbox0=\hbox{#1}\makebox[.2\wd0][r]{#1}}
\newcommand\sqr[1]{\setbox0=\hbox{#1}\makebox[.2\wd0][l]{#1}}
\begin{document}
\section*{Language tree Ntcham}
\savebox\mytree{%
{\small\begin{tikzpicture}
\tikzset{edge from parent/.style={draw,edge from parent path={(\tikzparentnode.south)-- +(0,-8pt)-| (\tikzchildnode)}}}
\Tree [.Niger-Congo
[.Atlantic-Congo
[.Volta-Congo
[.\sq{Kru} ]
[.North
[.Gur
[.\sq{Senufo} ]
[.Central
[.North
[.\sql{Bwamu} ]
[.Kurumfe ]
[.Oti-Volta
[.\sql{Buli/Konni} ] [.Eastern ] [.Western ]
[.Gurma
[.\sql{Ntcham/Bassari} ]
[.Akasele/Chamba ]
[.Konkomba, many dialects ]
[.Gangam/Dye ]
[.Gurma ]
[.\sqr{Moba(Moore~Gurma,~Bimoba)} ]
]
[.\sq{Yom/Naudem} ]
]
]
]
[.South [.\sql{Grusi} ] [.Kirma/Tyurama ] [.\sqr{Dyan} \sqr{(etc.)} ]
]
]
]
[.\sq{Adamawa-Ubangi} ]
]
[.\sq{Kwa} ]
]
] ]
\end{tikzpicture}
}}
\scalebox{.68}{\usebox{\mytree}}
\section*{Description}
\lipsum[3]
\clearpage
\begin{sidewaysfigure}
\centering
\scalebox{1.05}{\usebox{\mytree}}
\caption{Language tree Ntcham}
\end{sidewaysfigure}
\end{document}
为了进行比较,这里是 p.1 上的内联版本,其大小是 的 68%\small
:
答案2
你加载forest
包是正确的,因为它是为制作水平紧凑树而设计的。但你实际上并没有使用它在你的 MWE 中 — 你的树是使用 制作的tikz-qtree
。
因此,我曾经forest
修改过您的 MWE 并生成以下输出。我还添加了align=center
,它允许您使用在节点内放置换行符\\
,从而节省了大量水平空间。
\documentclass[a4paper, 11pt]{article}
\usepackage{lipsum} %This package just generates Lorem Ipsum filler text.
\usepackage{fullpage} % changes the margin
\usepackage{forest}
\usepackage{showframe} % just to show the margin lines; comment this package out for the final version
\begin{document}
\section*{Language tree Ntcham}
\begin{forest}
for tree={
edge path={
\noexpand\path [thick, \forestoption{edge}] (!u.parent anchor) -- +(0,-7pt) -| (.child anchor)\forestoption{edge label};
}, % this option together with setting the parent and child anchors to south and north, respectively, gives you the right-angle style for your branches
parent anchor=south,
child anchor=north,
align=center, % allows you to put line breaks within nodes
}
[Niger-Congo
[Atlantic-Congo
[Volta-Congo
[(New)\\Kru]
[(New)\\Kwa]
[Benue-Congo]
[Dogon(?)]
[North
[Gur
[Senufo]
[Central
[North
[Bwamu]
[Kurumfe]
[Oti-Volta
[Buli/Konni]
[Eastern]
[Western]
[Gurma
[Ntcham/\\Bassari]
[Akasele/\\Chamba]
[{Konkomba,\\many dialects}]
[Gangam/\\Dye]
[Gurma]
[{Moba\\(Moore Gurma,\\Bimoba)}]
]
[Yom/Naudem]
]
]
[South
[Grusi]
[Kirma/Tyurama]
[Dyan]
[etc.]
]
]
]
[Adamawa-Ubangi]
]
]
]
]
\end{forest}
\section*{Description}
\lipsum[3]
\end{document}
(注意:我遵循的是等宽版本的树而不是 MWE;在我看来(我是班图派),MWE 版本的 Kru 太低而 South Gur 太高。我确实将 Senufo 保留为 Central Gur 的姐妹,它在 MWE 中但不在等宽版本中。)
我可以仅通过forest
在节点内使用和添加换行符来将您的树保持在边缘内,但如果未来的树需要更大,您可以使用以下其他一些方法:
- 调整分支的顺序。有时移动姐妹会有所帮助。例如,你可以将 Oti-Volta 移到 Kurumfe 的左侧,使这棵树更加紧凑。
- 将整棵树缩小。我建议使用
\scalebox
来执行此操作。例如,您可以输入\scalebox{0.7}{put your tree here}
将树缩小 30%。(这是一个graphicx
命令;graphicx
由 加载,由和tikz
加载,因此如果您使用或,则无需单独加载。)forest
tikz-qtree
forest
tikz-qtree
graphicx
- 将树旋转90度。我建议使用该
rotating
包来执行此操作。