带有标签和颜色的内联图形符号

带有标签和颜色的内联图形符号

我当时正在写关于旗代数的文章,偶然发现了图论中的旗代数符号,它提供了创建内联图的新命令的代码。但是,我不确定如何修改代码,以便它接受更多参数,以允许选定的顶点具有标签或不同的颜色。也许我不太了解代码。我是 latex 的新手,只浏览了 tikz 包手册的部分内容——它太长了……如果有人能帮忙,那就太好了!提前谢谢!

编辑:抱歉,我说得不是很清楚。以这篇论文为例(https://arxiv.org/pdf/1607.04741.pdf),例如。我希望创建内联图形符号,其中选定的顶点为白色(而不是全黑,这是当前的默认设置),并且一些顶点旁边或内部有数字(我猜只有当顶点为白色时才会可见)。以下是该论文中的几个屏幕截图,可以说明我的意思。第一个屏幕截图不是内联的。我只是把它放在这里以显示我所说的部分标记的图形。但我优先考虑能够为修改后的新命令指定颜色(尽管我只需要黑色和白色)。 部分标记图

具有混合黑色和白色顶点的内联图

能够将图形视为插入运算符等中的字符

希望这些能解答我的疑问。再次感谢!

答案1

我已将解决方案从形状(regular polygon)更改为一些命名的圆形节点。

every corner您可以通过样式(快捷方式corners=<to add>:)和访问节点corner <num>。顶点也是一样:(every vertexvertices=<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存在相同的快捷方式,即,或在下面的示例中。sdd styledasheddensely dasheddensely 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}

文字和小三角图

相关内容