Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

https://www.overleaf.com/learn/latex/TikZ_package
主要是面向画图论的图

单文件和语法举例

\node\draw后面的[]中传入样式参数
\begin{tikzpicture}后面的[]中也是传参,定义这个画图环境中的一些变量

1

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}

\begin{tikzpicture}[
roundnode/.style={circle, draw=green!60, fill=green!5, very thick, minimum size=7mm},
squarednode/.style={rectangle, draw=red!60, fill=red!5, very thick, minimum size=5mm},
]
%Nodes
%\node[样式] (id) [位置描述] {显示在图上的标签}
\node[squarednode]      (maintopic)                              {2};
\node[roundnode]        (uppercircle)       [above=of maintopic] {1};
\node[squarednode]      (rightsquare)       [right=of maintopic] {3};
\node[roundnode]        (lowercircle)       [below=of maintopic] {4};

%Lines
%\draw[样式(->是有向边)] (id,可以加上.方向) 边类型(--是直线) (id,可以加上.方向)
\draw[->] (uppercircle.south) -- (maintopic.north); 
\draw[->] (maintopic.east) -- (rightsquare.west);
\draw[->] (rightsquare.south) .. controls +(down:7mm) and +(right:7mm) .. (lowercircle.east);
\end{tikzpicture}

\end{document}

效果:

2

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}

\begin{tikzpicture}[
    normalnode/.style={circle, draw=black!60, fill=white!5, very thick, minimum size=5mm},
    rednode/.style={circle, draw=red!60, fill=red!5, very thick, minimum size=5mm},
]
%Nodes
\node[normalnode] (4) {4};
\node[rednode] (1) [above=of 4] {1};
\node[normalnode] (3) [left=of 4] {3};
\node[rednode] (0) [below=of 3] {0};
\node[normalnode] (2) [below=of 4] {2};

%Lines
\draw[very thick] (0) -- (3);
\draw[very thick] (3) -- (1);
\draw[very thick] (0) -- (4);
\draw[very thick] (4) -- (1);
\draw[] (3) -- (4);
\draw[] (0) -- (2);
\draw[] (2) -- (4);
% % directed edge: 
% \draw[->] (4) -- (1);
\end{tikzpicture}

\end{document}

效果:

3

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}

\begin{tikzpicture}[
    normalnode/.style={circle, draw=black!60, fill=white!5, very thick, minimum size=5mm},
    rednode/.style={circle, draw=red!60, fill=red!5, very thick, minimum size=5mm},
    deletednode/.style={circle, draw=black!40, fill=white!5, text=black!40, minimum size=5mm},
    deletedline/.style={black!40, dashed},
]
%Nodes
\node[rednode] (1') {1'};
\node[normalnode] (4') [below=of 1'] {4'};
\node[normalnode] (3'') [left=of 4'] {3''};
\node[normalnode] (3') [left=of 3''] {3'};
\node[normalnode] (4'') [right=of 4'] {4''};
\node[normalnode] (2') [below=of 4'] {2'};
\node[normalnode] (2'') [right=of 2'] {2''};
\node[rednode] (0'') [below=of 3''] {0''};
\node[deletednode] (0') [left=of 0''] {0'};
\node[deletednode] (1'') [right=of 1'] {1''};

%Lines
\draw[very thick,->] (0'') -- (3');
\draw[very thick,->] (3') -- (3'');
\draw[very thick,->] (3'') -- (1');
\draw[very thick,->] (0'') -- (4');
\draw[very thick,->] (4') -- (4'');
\draw[very thick,->] (4'') -- (1');
\draw[->] (3'') -- (4');
\draw[->] (4''.north) .. controls +(up:10mm) and +(left:5mm) .. (3'.north);
\draw[->] (0'') -- (2');
\draw[->] (2'') -- (4');
\draw[->] (4'') -- (2');
\draw[->] (2') -- (2'');
\draw[deletedline,->] (0') -- (0'');
\draw[deletedline,->] (1') -- (1'');
\draw[deletedline,->] (3'') -- (0');
\draw[deletedline,->] (4'') -- (0');
\draw[deletedline,->] (2'') .. controls +(down:10mm) and +(left:2mm).. (0'.south);
\draw[deletedline,->] (1'') -- (3');
\draw[deletedline,->] (1'') -- (4');

\end{tikzpicture}

\end{document}

效果:

多文件举例(分离画图环境定义的变量和画图内容)

main.tex

main.tex中引入包和定制画图环境

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}

\newcommand{\picfolder}{pic} % Define a macro to hold the path,这样以后\picfolder就是pic,编译器会做这个替换
\input{\picfolder/control} % 直接把/pic/control.tex的内容粘贴过来,这个文件中定制了画图环境

\begin{document}
 
\input{doc} % 直接把/doc.tex的内容粘贴过来

\end{document}

control.tex

其中的定制文件control.tex,这样在引入这个定制文件之后整个工程中,这些定义的变量都可以在tikzpicture环境中使用

\tikzset{%
    normalnode/.style={circle, draw=black!60, fill=white!5, very thick, minimum size=5mm},
    rednode/.style={circle, draw=red!60, fill=red!5, very thick, minimum size=5mm},
    greennode/.style={circle, draw=green!60, fill=green!5, very thick, minimum size=5mm},
    deletednode/.style={circle, draw=black!40, fill=white!5, text=black!40, minimum size=5mm},
    deletedline/.style={black!40, dashed},
}
```

### doc.tex

文章内容`doc.tex`,一张图片,图片的引用标签是`fig:example_graph`,图片内容在`/pic/example_graph.tex`中

```tex
This a picture \ref{fig:example_graph}.
\begin{figure}[h] % [h]指定图片在页面上的位置
    \centering % 图片左右居中
    \input{\picfolder/example_graph} % 直接把`/pic/example_graph.tex`的内容粘贴过来
    \caption{$G'$}
    \label{fig:example_graph}
\end{figure}
```

### example_graph.tex

其中引入的图片`example_graph.tex`,内容即单文件示例中`\begin{tikzpicture}`-`\end{tikzpicture}`间的内容

```tex
\begin{tikzpicture}
%Nodes
\node[normalnode] (4) {4};
\node[rednode] (1) [above=of 4] {1};
\node[normalnode] (3) [left=of 4] {3};
\node[rednode] (0) [below=of 3] {0};
\node[normalnode] (2) [below=of 4] {2};

%Lines
\draw[very thick] (0) -- (3);
\draw[very thick] (3) -- (1);
\draw[very thick] (0) -- (4);
\draw[very thick] (4) -- (1);
\draw[] (3) -- (4);
\draw[] (0) -- (2);
\draw[] (2) -- (4);
% % directed edge: 
% \draw[->] (4) -- (1);
\end{tikzpicture}
```

### 目录结构和效果

{% asset_img image-20230115111259898.png %}

{% asset_img image-20230115111312159.png %}

## subfigure多个子图

对于上述多文件工程

### 修改main.tex

引入`\usepackage{subcaption}`

### 修改doc.tex

```tex
A example is given in figure \ref{fig:example_graph}. 
Another example is given in figure \ref{fig:example_graph2}. 

\begin{figure}[h!]
\newcommand{\mylinewidth}{\linewidth}
\centering
    \begin{subfigure}[t]{0.3\linewidth}
        \centering
        \raisebox{0.16\height} % 把这张图片上移一点,因为之前没有上移的时候这俩图片的视觉中心不是很对齐所以想着调整一下
        {
            \resizebox{0.8\mylinewidth}{!}
            {\input{\picfolder/example_graph}}
        }
        \caption{$G$}
        \label{fig:example_graph}
    \end{subfigure}
    \begin{subfigure}[t]{0.6\linewidth}
        \centering
        \resizebox{\mylinewidth}{!}
        {\input{\picfolder/example_graph2}}
        \caption{$G'$}
        \label{fig:example_graph2}
    \end{subfigure}
    \caption{examples}
    \label{fig:example}
\end{figure}  

新增example_graph2.tex

单文件例子3中\begin{tikzpicture}-\end{tikzpicture}间的内容

\begin{tikzpicture}
% ...
\end{tikzpicture}

目录结构和效果

评论