如何利用大括号实现分支结构图

如何利用大括号实现分支结构图

在此处输入图片描述

\documentclass{ctexart}
\setCJKmainfont{宋体} 
\usepackage{amsmath,mathptmx}

\begin{document}
$
\text{《内经》学术体系}
\begin{cases}
\text{医学理论}
        \begin{cases}
                \text{藏象}
                    \begin{cases}
                        \text{脏腑}\\
                        \text{经络}\\
                        \text{精气神}
                    \end{cases}\\
                \text{疾病}
                    \begin{cases}
                        \text{病机}
                            \begin{cases}
                                \text{病因}\\
                                \text{发病}\\
                                \text{病理}\\
                                \text{传变}
                            \end{cases}\\
                        \text{病症}
                    \end{cases}
        \end{cases}\\
\text{医学基础}
        \begin{cases}
                \text{哲学}\\
                \text{天文历法}\\
                \text{地理学}\\
                \text{气象学}\\
                \text{数学}\\
                \text{社会学}
        \end{cases}\\
\end{cases}
$

\end{document} 

在此处输入图片描述

答案1

我已经开始使用 TikZ 了,但如果能告诉我如何更有效地完成这项工作,我将不胜感激。请注意,我使用的是西拉特克斯在 Mac 上的 TeXShop 中。这不是完整的图表,如果我拼错了任何汉字,我深表歉意。这只是一个起点。

    % !TEX encoding = UTF-8 Unicode
% !TEX TS-program = XeLaTeX

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,decorations.pathreplacing,calc}
\usepackage{fontspec}
\setmainfont{Adobe Song Std L}

\begin{document}

\begin{tikzpicture}[node distance=0.5em]
\node (main) at (0,0) {《内经》学术体系};
    \node (t1) at (1in,5\baselineskip) {医学理论};
    \node (t2) at (1in,-5\baselineskip) {医学基础};
\draw[decorate,decoration={brace,mirror}] (t1.west) -- (t2.west);
    \node [right =of t1,yshift=7\baselineskip] (st1) {藏象};
    \node [right =of t1,yshift=2\baselineskip] (st2) {疾病};
    \node [right =of t1,yshift=-1.5\baselineskip] (st3) {诊法};
    \node [right =of t1,yshift=-4\baselineskip] (st4) {论治};
    \node [right =of t1,yshift=-6.5\baselineskip] (st5) {养生};
\draw[decorate,decoration={brace,mirror,aspect=0.525}] (st1.west) -- (st5.west);
    \node [right =of st1,yshift=1.5\baselineskip] (sst1) {脏腑};
    \node [right =of st1] (sst2) {经络};
    \node [right =of st1,yshift=-1.5\baselineskip] (sst3) {精气神};
    \node [right =of st2, yshift =1\baselineskip] (sst4){病机};
    \node [right =of st2, yshift =-2.5\baselineskip] (sst5){病证};
\draw[decorate,decoration={brace,mirror}] (sst1.west) -- (sst3.west);
    \node [right =of sst4, yshift=1.5\baselineskip] (ssst1) {病因};
    \node [right =of sst4, yshift=0.5\baselineskip] (ssst2) {发病};
    \node [right =of sst4, yshift=-0.5\baselineskip] (ssst3) {病理};
    \node [right =of sst4, yshift=-1.5\baselineskip] (ssst4) {传变};
\draw[decorate,decoration={brace,mirror}] (ssst1.west) -- (ssst4.west);
\draw[decorate,decoration={brace,mirror}] (sst4.west|-ssst1) -- (sst5.west);
\end{tikzpicture}

排版表

警告确实需要一点调整才能让它按照你想要的方式出现。

一些背景和解释:

这个问题展示了两个强大的 TikZ 工具:

  1. 节点的相对位置。* 右侧的 = 使用户无需计算距离和摆弄尺寸。(TikZ 文档第 13 章。)

  2. 使用节点名称也是一种解放,因为你不必精确地记下节点的位置——你只需引用它的名称。(TikZ 文档第 16 章。)其中有趣的部分是在第四列字符中,从顶部开始的第二组:括号延伸到顶部的字形对上方。这是通过以下方式实现的:

\draw[decorate,decoration={brace,mirror}] (sst4.west|-ssst1) -- (sst5.west);

它起始于sst5.west并延伸至 sst4.west 的 x 坐标,但结束于 ssst1 的 y 坐标。

我通过将原文视为字符列来解决这个问题。每个垂直组可以分成更小的组,并在它们旁边画上括号。

如果我有时间,我可能会完成它。我认为所有艰苦的工作都完成了……

答案2

最后,我使用 schemata 包解决了这个问题。虽然不是太完美。

% -*- coding: utf-8 -*-
%!TEX program = xelatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{宋体}
%-----------------------------------------
\usepackage{schemata,xpatch}
\xpatchcmd{\schema}
  {1.44265ex}{-1ex}
  {}{}
\newcommand\SC[2]{\schema{\schemabox{#1}}{\schemabox{#2}}}
\newcommand\SCh[4]{\Schema{#1}{#2}{\schemabox{#3}}{\schemabox{#4}}}
%-----------------------------------------

\begin{document}
{
\small\centerline{《内经》病因系统表}\smallskip
\label{fig:《内经》病因系统表}
\renewcommand{\baselinestretch}{1}

\hspace{.1\textwidth}%左侧空白
\SCh{-5.7ex}{6ex}{致病因素}{\smallskip
        \SC{自然环境}{
            天气:风、雨、寒、暑、湿、燥、雾、露等\\
            天象:天宿失度,日月薄蚀,月郭圆缺\\
            地理:地域,地势
        }\\
        \SC{社会环境}{
            政治:政体,战争,职位\\
            经济:经济制度,贫富差异\\
            道徳:嗜欲无穷(物欲、权欲、色欲)\\
            心理:情志异常\\
            信仰:崇拜,迷信\\
            民俗:地区风气,生活习俗\\
            饮食:嗜食,偏食,饱食,冷食\\
            劳伤:体劳,房劳\\
            中毒:毒物(包括药物),醉酒}
}\hfill }


{
\label{fig:《内经》学术体系基本框架结构图}
\renewcommand{\baselinestretch}{1}
\small
\hspace{.1\textwidth}%左侧距离
\SCh{9.5ex}{11.3ex}{《内经》学术体系}{
        \SCh{0.1ex}{13.7ex}{医学理论}{\smallskip
            \SC{藏象}{脏腑\\经络\\精气神}\\\smallskip
            \SCh{2.8ex}{2.9ex}{疾病}{
                \SC{病机}{病因\\发病\\病理\\传变}\\
                病症}\\\smallskip
            \SC{诊法}{\smallskip 诊病方法\\断病法则}\\\smallskip
            \SC{论治}{治则\\治法\\疗法\\测试}\\\smallskip
            \SC{养生}{\smallskip 摄生\\康复}
        }\\
        \SC{医学基础}{
            哲学\\
            天文历法\\
            地理学\\
            气象学\\
            数学\\
            社会学}
}\hfill }


\end{document} 

在此处输入图片描述

相关内容