如何格式化语言树?

如何格式化语言树?

我想用 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. 格式化

树太宽

格式化的 XeLaTeX 代码的 PDF 视图

4. 问题

使用的软件包是

\usepackage{graphicx}
\usepackage{forest}
\usepackage{tikz-qtree}
  1. 这是正确的组合吗?
  2. 我如何使用这个包来移动树枝以便整棵树能够合适?

答案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 倍。\smallsidewaysfigure

\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加载,因此如果您使用或,则无需单独加载。)foresttikz-qtreeforesttikz-qtreegraphicx
  • 将树旋转90度。我建议使用该rotating包来执行此操作。

相关内容