我当时正在写关于旗代数的文章,偶然发现了图论中的旗代数符号,它提供了创建内联图的新命令的代码。但是,我不确定如何修改代码,以便它接受更多参数,以允许选定的顶点具有标签或不同的颜色。也许我不太了解代码。我是 latex 的新手,只浏览了 tikz 包手册的部分内容——它太长了……如果有人能帮忙,那就太好了!提前谢谢!
编辑:抱歉,我说得不是很清楚。以这篇论文为例(https://arxiv.org/pdf/1607.04741.pdf),例如。我希望创建内联图形符号,其中选定的顶点为白色(而不是全黑,这是当前的默认设置),并且一些顶点旁边或内部有数字(我猜只有当顶点为白色时才会可见)。以下是该论文中的几个屏幕截图,可以说明我的意思。第一个屏幕截图不是内联的。我只是把它放在这里以显示我所说的部分标记的图形。但我优先考虑能够为修改后的新命令指定颜色(尽管我只需要黑色和白色)。
希望这些能解答我的疑问。再次感谢!
答案1
我已将解决方案从形状(regular polygon
)更改为一些命名的圆形节点。
every corner
您可以通过样式(快捷方式corners=<to add>
:)和访问节点corner <num>
。顶点也是一样:(every vertex
)vertices=<to add>
和vertex <c1>-<c2>
。
还有set corners={<corner list>=<styles>}
,set vertices={<vertices list>=<styles>}
您可以用它快速设置一个或多个角或顶点的样式,而不必/.append style
每次都写入。
使用像宏这样的宏,\triGraph
您不必{3}{1-2, 2-3, 3-1}
每次都指定。 也是如此\biGraph
。 还有一个\biGraphGround
内部绘制具有三个顶点/角的图形,但不绘制第三个(上)角。 我们使用它来获得与 s 相同的间距和垂直图像\triGraph
。
我还设置了样式,这些样式是填充角圆的快捷方式(x
= 填充,o
= 无填充)。这样意味着第一个和第三个角将被填充,第二个角将不被填充。对于顶点, = solid 和=也xox
存在相同的快捷方式,即,或在下面的示例中。s
d
d style
dashed
densely dashed
densely dotted
这样,第一个矩阵就可以像这样给出
\flaggraphset{size=big,oox}
\begin{pmatrix}
\triGraph[ddd] + \triGraph[sdd]
& \frac {1}{2} (\triGraph[dsd] + \triGraph[ssd]) \\
\frac {1}{2} (\triGraph[dsd] + \triGraph[ssd])
& \triGraph[dss]
\end{pmatrix}
为此,我要单独介绍一个鍵盤名称空间(/flaggraph
)而不是使用默认值,/tikz
这样我们就不会与其他类似的命名样式发生任何冲突。
\tikzset{<kv>}
我们现在使用 ,而不是\flaggraphset{<kv>}
。
该样式label corners
可用于显示所有弯道的名称,但这只能用于查找某个弯道的编号。
该label 12
样式用于标记如图所示的第一个角和第二个角。
代码
\documentclass{article}
\usepackage{tikz}
\usepackage{mathtools,stmaryrd}
\DeclarePairedDelimiter{\downwardoperator}{\llbracket}{\rrbracket_\bullet}
\newcommand*\flaggraphset{\pgfqkeys{/flaggraph}}
\tikzset{
flag graph/.code=\flaggraphset{#1},
declare function={angInPolygon(\i,\n)=(\i-1)/\n*360;}}
\flaggraphset{
tikz/.code=\tikzset{#1},
vertex path/.style args={#1-#2}{
insert path={(corner-#1) to (corner-#2)}},
every corner/.style={
shape=circle, draw, inner sep=+0pt, minimum size=+1.5pt},
every vertex/.style=draw,
%
size/.is choice,
d style/.style=densely dashed,
size/default/.style={every flaggraph/.append style={
x=.4em, y=.4em, baseline=-.3em, /flaggraph/corners={minimum size=+1.5pt}}},
size/big/.style={every flaggraph/.append style={
x=.55em, y=.55em, baseline=-.6ex, /flaggraph/corners={minimum size=+2.5pt}}},
size/bigger/.style={d style/.style=dashed, every flaggraph/.append style={thick,
x=2em, y=2em, baseline=-1.25em, /flaggraph/corners={minimum size=+6pt}}},
size=default,
%
vertex 1-2 horizontal/.style={/tikz/rotate=210},
% setting all corners/vertices
corners/.style={/flaggraph/every corner/.append style={#1}},
vertices/.style={/flaggraph/every vertex/.append style={#1}},
% setting styles
set corners/.style args={#1=#2}{
@/.style={corner ##1/.append style={#2}},@/.list={#1}},
set vertices/.style args={#1=#2}{
@/.style={vertex ##1/.append style={#2}},@/.list={#1}},
% debug
label corners/.style={corners={label={[/flaggraph/label corner]:\Corner}}},
label corner/.style={overlay,font=\tiny,gray,inner sep=+0pt}
}
\newcommand*\FlagGraph[3][]{
\begin{tikzpicture}[flag graph={#1},/flaggraph/every flaggraph]
\foreach \Corner in {1,...,#2}
\node[/flaggraph/every corner, /flaggraph/corner \Corner/.try]
at ({angInPolygon(\Corner,#2)}:1) (corner-\Corner) {};
\foreach \Edge in {#3}
\path[/flaggraph/every vertex, /flaggraph/vertex \Edge/.try,
/flaggraph/vertex path/.expanded=\Edge];
\end{tikzpicture}}
\newcommand*\biGraphGround[1][]{%
\FlagGraph[vertex 1-2 horizontal,#1,
corner 3/.append style={draw=none,fill=none}]{3}{1-2}}
\newcommand*\biGraph[1][]{\FlagGraph[#1]{2}{1-2}}
\flaggraphset{% styles for 2-graphs
oo/.style={corners={fill=none}},xx/.style={corners=fill},
xo/.style={corner 1/.append style=fill,corner 2/.append style={fill=none}},
ox/.style={corner 1/.append style={fill=none},corner 2/.append style=fill},
s/.style={vertices=solid}, d/.style={vertices=/flaggraph/d style},
label 12/.style={
corner 1/.append style={label={[inner sep=1pt, font=\small]left:1}},
corner 2/.append style={label={[inner sep=1pt, font=\small]right:2}}}
}
\newcommand*\triGraph[1][]{\FlagGraph[vertex 1-2 horizontal,#1]{3}{1-2,2-3,3-1}}
\flaggraphset{% styles for 3-graphs
ooo/.style={corners={fill=none}},xxx/.style={corners=fill},
oox/.style={set corners={3=fill},set corners={1,2=fill=none}},
sss/.style={vertices=solid}, ddd/.style={vertices=/flaggraph/d style},
sdd/.style={set vertices={2-3,3-1=/flaggraph/d style},set vertices={1-2=solid}},
dss/.style={set vertices={1-2=/flaggraph/d style},set vertices={2-3,3-1=solid}},
dsd/.style={set vertices={1-2,3-1=/flaggraph/d style},set vertices={2-3=solid}},
ssd/.style={set vertices={3-1=/flaggraph/d style},set vertices={1-2,2-3=solid}},
sds/.style={set vertices={2-3=/flaggraph/d style},set vertices={1-2,3-1=solid}},
}
% o = don't fill corner, x = fill corner
% s = solid line, d = dashed line
\begin{document}
Text: \FlagGraph[set corners={3,5 = red}]{5}{1-2,1-4}\par
Text: \FlagGraph[set corners={2 = blue}]{3}{1-2}\par
Text: \FlagGraph[vertices=bend left]{2}{1-2}\par
Text: \FlagGraph[label corners]{2}{}\par
Text: \FlagGraph[corners=green,
set vertices={3-1=densely dotted}]{5}{3-1,3-2,3-4,3-5}\par
\[ vv^\top = \flaggraphset{size=big,oox}
\begin{pmatrix}
\triGraph[ddd] + \triGraph[sdd]
& \frac 12 (\triGraph[dsd] + \triGraph[ssd]) \\
\frac 12 (\triGraph[dsd] + \triGraph[ssd]) & \triGraph[dss]
\end{pmatrix}
\]
and then apply the downward operator to get
\[ \downwardoperator{vv^\top} = \flaggraphset{size=big}
\begin{pmatrix}
\triGraph[ddd] + \frac 13 \triGraph[sdd]
& \frac 13 (\triGraph[sdd] + \triGraph[dss]) \\
\frac 13 (\triGraph[sdd] + \triGraph[dss]) & \triGraph[dss]
\end{pmatrix}
\]
\begin{center}
\flaggraphset{size=bigger}
\begin{tabular}{*{5}{c}}
\biGraphGround[d] & \biGraphGround[s] & \triGraph[ddd] & \triGraph[sdd] & \triGraph[dss] \\
& \triGraph[label 12, sdd] & \triGraph[label 12, sds] & \triGraph[label 12,ssd] &
\end{tabular}
\end{center}
% Instead of \textbullet, something like this could be used:
% \FlagGraph[size=big,corners=fill]{1}{}
\flaggraphset{size=big, d style/.style=densely dotted}
These are the \textbullet-flags of sizes 2 and 3:
\biGraph[xo,d], \biGraph[xo], {\flaggraphset{oox}\triGraph[ddd], \triGraph[sdd],
\triGraph[dsd], \triGraph[dss], and \triGraph[ssd].
\end{document}
输出
答案2
Tikz 已经有绘制图形的方法。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{quotes}
\usetikzlibrary {graphs}
\tikzgraphsset{
empty nodes,
nodes={circle, draw, inner sep=0pt, minimum size=2pt},
counterclockwise, radius=6pt, phase=210,
}
\tikzset{
%baseline=0pt,
every label/.style={font=\tiny, inner sep=0pt},
dashed/.style={dash pattern=on 1pt off 1pt},
label distance=1pt,
}
\begin{document}
~\\Example 1 \tikz \graph[n=3] {1,2,3;1--2--3--1};\\~\\
example 2 in math:
\( \mathcal{H} = \tikz \graph[n=3] {1["1"'left],2["2"'right],3[fill]; 1--[dashed]2--3--[dashed]1}; \)
\end{document}
编辑:
来自OP评论:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{quotes}
\usetikzlibrary {graphs}
\tikzgraphsset{
empty nodes,
nodes={circle, draw, inner sep=0pt, minimum size=2pt},
counterclockwise, radius=6pt, phase=210,
}
\tikzset{
baseline=-2pt,
every label/.style={font=\tiny, inner sep=0pt},
dashed/.style={dash pattern=on 1pt off 1pt},
label distance=1pt,
}
\begin{document}
Let $\mathcal{H}$ be \tikz \graph[n=3]{1,2,3;1--2,1--3,2--3}; and $\sigma$ be \tikz \graph[n=3] {1,2,3;2["2"'right],1["1"'left];1--2};
\end{document}