怎样模拟图片中的思维导图?

怎样模拟图片中的思维导图?

名为“目的”的节点没有停留在左侧中心。

我希望它自动对齐到正确的点而不是手动对齐。

\documentclass[tikz]{standalone}
\usepackage{ctex}%引入中文
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{mathrsfs}  
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{comment}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{mindmap,trees,graphs,arrows,positioning} % this is to allow the fork right path
\begin{document}
\begin{tikzpicture}
%目前的困难1实现箭头的弯曲,2实现根节点居中,3实现变量代替具体的文本,集中管理,让树的结构清晰
\graph [grow right sep, left anchor=east, right anchor=west,nodes=draw,edge=thick] {
    {"目的"}-> {
        {"证明否命题为假,即要得到结果"} -> {
            {"$\exists I\in\mathscr{I}(A\subset I)$"} ->
                {为真}
        },
        {"如何表示$A\subset I$,即$A$在$I$的内部?"} ->{
            {"$A$中所有的点到$I$内一点的距离,小于该点到$I$外点的最短距离"} ,
            {"$\exists a\in B,\forall x\in A, \forall y \in B^c(sup|a-x|<inf|a-y|\Rightarrow A\subset B)$"}
        }
    }
};
\end{tikzpicture}

\end{document}

在此处输入图片描述 在此处输入图片描述

答案1

首先要说的是,我很抱歉,我无法复制您的角色。除此之外,我建议你forest完成这项任务。对齐可以通过tiers 实现。我还添加了一个带圆角的分叉边缘版本。

\documentclass{article}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{mathrsfs}
\usepackage[edges]{forest}
\usetikzlibrary{backgrounds}
\definecolor{bgreen}{RGB}{230,240,224}
\definecolor{fgreen}{RGB}{246,250,238}
\begin{document}
\begin{forest}
for tree={grow'=0,
    fill=fgreen,
    rounded corners,
    edge={thick,fgreen},
    edge path={
        \noexpand\path[\forestoption{edge}] 
        let \noexpand\p1=($(!u.parent anchor)-(.child anchor)$),
        \noexpand\n1={int(ifthenelse(abs(\noexpand\y1)>2pt,2,0))} in
        (!u.parent anchor)
        \noexpand\ifdim\noexpand\n1>1pt
           -- ++(5pt,0) [rounded corners] |-(.child anchor)
        \noexpand\else
        --(.child anchor|-!u.parent anchor)
        \noexpand\fi  
          \forestoption{edge label};
        },  
    child anchor=west,
    parent anchor=east,
    anchor=base west,
    tier/.wrap pgfmath arg={#1}{level}
    }
[AB
 [ABC
  [$\exists I\in\mathscr{I}(A\subset I)$
   [ABCD]
   ]
 ]
 [BCD $A\subset I$
  [BCD AB]
  [{$\exists a\in B,\forall x\in A, \forall y \in  B^c(\sup|a-x|<\inf|a-y|\Rightarrow A\subset B)$}]
 ]
]
\scoped[on background layer]{
\path[fill=bgreen] ([yshift=-1ex,xshift=-1ex]current bounding box.south west) rectangle 
([yshift=1ex,xshift=1ex]current bounding box.north east);}
\end{forest}

\end{document}

在此处输入图片描述

答案2

一个非常基本的方法是yshift=向上或向下。

y 轴偏移

forest看起来好多了。

平均能量损失

\documentclass[tikz,border=6pt]{standalone}
\usepackage{ctex}%引入中文
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{mathrsfs}  
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{comment}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{mindmap,trees,graphs,arrows,positioning} % this is to allow the fork right path
\begin{document}
\begin{tikzpicture}
%目前的困难1实现箭头的弯曲,2实现根节点居中,3实现变量代替具体的文本,集中管理,让树的结构清晰
\graph [grow right sep,left anchor=east, right anchor=west,nodes=draw,edge=thick] {
    {"目的"[yshift=-2em]}-> {
        {"证明否命题为假,即要得到结果"} -> {
            {"$\exists I\in\mathscr{I}(A\subset I)$"} ->
                {为真}
        },
        {"如何表示$A\subset I$,即$A$在$I$的内部?"[yshift=-1.5em]} ->{
            {"$A$中所有的点到$I$内一点的距离,小于该点到$I$外点的最短距离"} ,
            {"$\exists a\in B,\forall x\in A, \forall y \in B^c(sup|a-x|<inf|a-y|\Rightarrow A\subset B)$"}
        }
    }
};
\end{tikzpicture}

\end{document}

相关内容