如何在 tiKz 中绘制双圆图?

如何在 tiKz 中绘制双圆图?

如何在 LaTeX 中绘制下图?但我不想在顶点处放黑点,而是想放数字。在此处输入图片描述

答案1

为此,我们需要以下 TiZ 库:

  1. calc将一些节点放置在另外两个节点的中间点:
\node (N) at ($(A)!0.5!(B)$) {}; % places the node (N) midway between (A) and (B)
  1. backgrounds最后绘制椭圆,但on background layer(在节点后面)。此选项需要scope

剩下的,先把所有的节点都摆好,再画线(如 所述on background layer)。由于图中有两个几乎完全相同的图,我们可以使用一个\foreach循环来放置左右节点,代码相同,再用另一个循环来放置编号节点。

像这样:

\documentclass[tikz,border=1.618mm]{standalone}
\usetikzlibrary{calc,backgrounds}

\definecolor{aquamarine}{HTML}{008B9B}
\tikzset{my node/.style={draw,circle,fill=white,inner sep=0,minimum size=9mm}}

\begin{document}
\begin{tikzpicture}
\def\a{4.5}  % a semiaxis
\def\b{2.25} % b semiaxis
\def\h{2.5}  % height
\foreach[count=\jj from 0]\j in {L,R} % left, right
{
  \begin{scope}[shift={({2*\jj*(\a+0.5)},0)}]
    \foreach[count=\ii]\i in {130,210,250,290,330}
    {% nodes 1 to 5
       \node[my node]              (\j B\ii) at (\i:\a cm and \b cm) {$\ii'$};
       \node[my node,yshift=\h cm] (\j T\ii) at (\i:\a cm and \b cm) {$\ii$};
    }% nodes 6 and 7
    \node[my node]              (\j B6) at (50:\a cm and \b cm) {};
    \node[my node,yshift=\h cm] (\j T6) at (50:\a cm and \b cm) {};
    \node[my node]              (\j B7) at (90:\a cm and \b cm) {$(2n)'$};
    \node[my node,yshift=\h cm] (\j T7) at (90:\a cm and \b cm) {$(2n)$};
    \foreach\i in {1,...,7}% vertical lines
      \draw (\j B\i) -- (\j T\i);
    \foreach\i in {2,4}% middle height nodes
      \node[my node]  at ($(\j B\i)!0.5!(\j T\i)$) {\pgfmathparse{int(\i/2)}$\bar\pgfmathresult$};
    \node[rotate=-10] at ($(\j B6) !0.5!(\j T7)$)  {$\cdots$}; % dots
  \end{scope}
}
% ellipses
\begin{scope}[on background layer]
  \draw[very thick,red]        (0,0)  ellipse (\a cm and \b cm);
  \draw[very thick,aquamarine] (0,\h) ellipse (\a cm and \b cm);
  \draw[very thick,red]        (RT7) -- (RB1.center) arc (130:450:\a cm and \b cm);
  \draw[very thick,aquamarine] (RB7) -- (RT1.center) arc (130:450:\a cm and \b cm);
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

由于 TO 至少对于 Tikz 来说是新的,因此让我强调一下Juan 的精彩回答,为新手铺平道路。我将使用代码摘录,其中仅显示必需的内容。

新手不应该被 Tikz 丰富的语法吓倒,而应该逐个元素地征服它,就像我在这里使用的简化一样。尝试并接受。

1. 省略号

  • standalone是用于绘图的文档类;替换article并编译以查看差异
  • 为了定义常量,他使用 TEX 符号,例如,稍后\def\h{4}调用\h
  • 我放了一个help grid来简化方向一点
  • \h稍微增加了一点以便更好地看到中心
  • % ellipses部分是 tikz-ish:\draw某事,与[options],,(some, where)意图ellipse(parameters) ;
  • 最后,为了更好地了解椭圆的定义,我将两个\nodes 与一些{text}以及[draw]它的形状(即框架)放在一起

椭圆形

摘自 Juans 的代码和扩展:

\documentclass[tikz,border=1.618mm]{standalone}
\usetikzlibrary{backgrounds}

\definecolor{aquamarine}{HTML}{008B9B}

\begin{document}
\begin{tikzpicture}
    \def\a{4.5}  % a semiaxis   % TEX-syntax; defines a constant
    \def\b{2.25} % b semiaxis
    \def\h{3}  % height         % increased separation
    
    % ~~~ for some orientation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \draw [help lines] (-5,-3) grid (5,3);
    
    % ellipses
    \begin{scope}[on background layer]
      \draw[very thick,red]        (0,0)  ellipse (\a cm and \b cm);
      \draw[very thick,aquamarine] (0,\h) ellipse (\a cm and \b cm);
      
      % ~~~ indicating the centers ~~~~~~~~~~~~~~~~~~~~
      \node [draw] at (0,0)  {(0/0 - red center)};
      \node [draw] at (0,\h) {(0/\h) - green center};
    \end{scope}
\end{tikzpicture}
\end{document}

2.“自动”命名节点

非常棒,对于 Tikz 新手来说,需要消化很多内容。

  • 为了说明,我再次放了一个简单的help grid,和一些文字上面以下
  • \foreach \j in {L,R}将迭代给定的集合,这里{L,R},变量\j在迭代时将具有值 L 和 R
  • [count=\jj from 0]选项引入了第二个变量\jj,给出所述列表中的索引或位置,即取值 0 和 1
  • 所以在第一个循环中将\node at (\jj,0) {\j};被替换为\node at ( 0 ,0) {L};
  • 他稍后会重复使用此机制来生成节点位置的名称
  • eg(RT7)用于寻址所述节点,该节点由 eg 预先生成(\j T7),在迭代过程中\j具有值R

节点名称

摘自 Juans 的代码和扩展:

\documentclass[tikz,border=1.618mm]{standalone}

\begin{document}
\begin{tikzpicture}
    % ~~~ help grid, from (0/0) to (1/2), 1 cm each ~~~~~~~
    \draw [help lines] (0,0) grid (1,2);
    % ~~~ placing a node, with text, draw its shape ~~~~~~~~
    \node [draw] at (0,2) {centered text at (0/2)};
    
    % Juan's special, simplified
    \foreach[count=\jj from 0]\j in {L,R} % left, right
    {
        \node at (\jj,0) {\j};  
    }
    
    % ~~~ just to emphasize placement ~~~~~~~~~~~~~~~~~~~
    \draw [dashed,thick] (0,.5) -- (0,1.5);

\end{tikzpicture}
\end{document}

3. 其他 Tikz 语法

最好从 ctan 下载 tikz 手册,该手册也有在线 HTML 版本。让我们来看看还有哪些地方需要解释或指出,以便充分理解 Juan 的回答。

  • tikz-libraries 扩展了 Tikz;calcbackgrounds在手册中有描述
  • \tikzset定义绘图的选项或属性;使代码更具可读性;例如:\node [my node]...使用定义为的样式my node
  • \begin{}...\end{}是在 LaTeX 和 Tikz 中定义的环境
  • scope有时是必要的;参见相关章节
  • \node是你很快就应该记住的一个 Tikz 元素;请参阅相关章节以及第一部分中的教程
  • yshift移动节点内容,此处沿 y 轴移动;通常用于微调位置
  • $formula$定义 LaTeX 中的数学环境;作为文本,它可以是节点的内容,例如\node at (0,0) {$formula$};
  • \pgfmathparse\pgfresult在手册的后面进行了解释:大多数时候你可以不用它,但对于双圈任务来说它很有用

相关内容