尝试使用具有数学模式名称的多个顶点

尝试使用具有数学模式名称的多个顶点

我正在使用 Ti 制作一个简单的图表Z。

我目前拥有的代码是:

\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{graphs,graphs.standard}

\begin{document}

\begin{center}
\begin{tikzpicture}
\graph[clockwise, n=3, V={i,j,k}, edge={bend left=45, -stealth}] { subgraph C_n };
\end{tikzpicture}
\end{center}

\end{document}

输出编译上述代码时我收到的是:

在此处输入图片描述

我唯一想做的更改是显示$\mathbf{i}$而不是 i、$\mathbf{j}$而不是 j 和$\mathbf{k}$而不是 k。当我尝试这样做时,编译不起作用,并且我收到以下错误消息:

Undefined control sequence.

答案1

您为钥匙V用于名称节点。这些类型的名称不允许“特殊”宏,例如\mathbf。(节点名称在 PGF 内部用作宏名称,这些名称需要完全可扩展为文本。\mathbf因此,一切都变得一团糟。)

然而,graphs图书馆提供了typeset钥匙您可以访问某些宏,主要是\tikzgraphnodename\tikzgraphnodetext宏(在这个简单情况下它们是相同的):

\graph[
  clockwise,
  n=3,
  V={i,j,k},
  edge={bend left=45, -stealth},
  typeset=$\mathbf{\tikzgraphnodetext}$ % !or $\mathbf{\tikzgraphnodename}$
] { subgraph C_n };

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{graphs,graphs.standard}
\begin{document}
\tikz\graph[clockwise, n=3, V={i,j,k}, edge={bend left=45, -stealth}, % no typeset
  ] { subgraph C_n };
\tikz\graph[clockwise, n=3, V={i,j,k}, edge={bend left=45, -stealth}, % typeset with text
  typeset=$\mathbf{\tikzgraphnodetext}$] { subgraph C_n };
\tikz\graph[clockwise, n=3, V={i,j,k}, edge={bend left=45, -stealth}, % typeset with name
  typeset=$\mathbf{\tikzgraphnodename}$] { subgraph C_n };
\tikz\graph[clockwise, n=3, edge={bend left=45, -stealth}, % for fun
  typeset=$v_{\tikzgraphnodetext}$,
  nodes={text=red!\the\numexpr\tikzgraphnodetext00/3\relax!blue}
] { subgraph C_n };
\end{document}

感谢Henri Menke 的评论subgraph I_n,对(由 内部使用)进行小修复后,subgraph C_n您可以使用\graph指定顶点的方式的全部力量

但是,由于它使用\foreach循环,因此在使用节点文本或选项时需要进行保护,(或者在节点名称中,但这不是一个好主意)。

V={ i / $\mathbf{i}$, j / $\mathbf{j}$, k / $\mathbf{k}$ [{red, fill=green}]}

或者

V={ i / $\mathbf{i}$, j / $\mathbf{j}$, {k / $\mathbf{k}$ [red, fill=green]}}

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{graphs,graphs.standard}
\makeatletter
\tikzgraphsset{
  declare={subgraph I_n}{
    \foreach \tikz@lib@graph@node@num in \tikzgraphV
      {[parse/.expand once=\tikz@lib@graph@node@num]}}}
\makeatother
\begin{document}
\tikz\graph[clockwise, n=3,
  V={ i / $\mathbf{i}$, j / $\mathbf{j}$, k / $\mathbf{k}$ },
  edge={bend left=45, -stealth}] { subgraph C_n };
\end{document}

相关内容