重新分配变量

重新分配变量

我想保存最后一个顶点的名称。
最后我意识到\def不能重新分配。所以我总是使用第一个顶点的坐标“14”。但它应该是“14”“13”“12”。此外,三条最低水平线的长度应该与后继节点的第二条最低水平线的长度相同。你还可以看到,我不知道如何在 if 语句中链接(and/or/||/&&)表达式,也不知道如何表达否定(!)。如果没有 20 个额外的包和令人困惑且不一致的新语法,LaTeX 甚至可以做到这一点吗?

\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
\usepackage{tikz}
\usepackage{mathpazo}
\usepackage{pdftexcmds}
\PreviewEnvironment{tikzpicture}
\usetikzlibrary{calc}
\usepackage{verbatim}

\usepackage{amsmath,amstext,pstricks}

\begin{document}
    \begin{tikzpicture}

    \begin{scope}
    \tikzstyle{vertex}=[circle,fill=black!20,minimum size=0.6cm,inner sep=0pt]

    \foreach \e/\l/\name in {0/2/11, 3.5/5.5/12, 8.6/10.6/13, 14/16.5/14}
    {
        \coordinate (PPE-\name) at (\l,-1.0); %save position for maxPushforward own
        \coordinate (PPA-\name) at (\e,-1.0);
        \draw (\e,0) -- (\l,0);
        \draw (\e,0.1) -- (\e,-0.1) node[label=south: \footnotesize $e_{R_{\name}}$ ]{};
        \draw (\l,0.1) -- (\l,-0.1) node[label=south: \footnotesize $l_{R_{\name}}$ ]{};
    }


    \def\succr{14};
    \foreach \name/\x/\text in {4/15/14, 32/10/13, 31/7.5/13, 2/4.2/12, 1/1/11} 
    {
        \node[vertex] (V-\name) at (\x,0) {$R_{\text}$};
        \draw[dotted] (\x-0.3,0) -- (\x-0.3,-2);
        \def\nameref{\name}     

        \ifnum \pdfstrcmp{4}{\nameref}=0
        % do nothing
        \else
            \ifnum \pdfstrcmp{31}{\nameref}=0
            % do nothing
            \else
                \draw[->] (\x-0.3,-1.5) let \p1 = ($(PPA-\succr)-(PPE-\succr)$) in -- ++({veclen(\x1,\y1)},0) node{PPA-\succr};

            \fi
        \fi %

        \ifnum \pdfstrcmp{31}{\nameref}=0
        % ein königreich für != oder <> ... maybe \!= 
        \else
            \draw[->] (\x-0.3,-1) -- (PPE-\text);
            \def\succr{\text};
        \fi
    } 


    \foreach \from/\to/\fname/\tname in {1/2/1/2,2/31/2/3,32/4/3/4}
        \draw[->] (V-\from) to[out=30,in=150] node[above,sloped] {$d_{R_{1\fname}R_{1\tname}}$} (V-\to);

    \end{scope}

    \end{tikzpicture}
\end{document}

在此处输入图片描述


也许这张图片可以帮助您理解我打算做什么。 PPF 线对的长度应相同。 每个节点都绘制自己的 PPF 线。 然后我尝试将顶点的名称保存为 \succr。 在下一次迭代/节点中,我计算前一个节点的 PFF 线的长度,并在底部绘制相应的线(\succr)。 目前,这些线的长度并不相同。

在此处输入图片描述

答案1

在此处输入图片描述

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}

\begin{document}
    \begin{tikzpicture}[vertex/.style={circle,fill=black!20,minimum size=0.6cm,inner sep=0pt}]
    \begin{scope}
    \foreach \e/\l/\name in {0/2/11, 3.5/5.5/12, 8.6/10.6/13, 14/16.5/14}
    {
        \coordinate (PPE-\name) at (\l,-1.0);
        \coordinate (PPA-\name) at (\e,-1.0);
        \draw (\e,0) -- (\l,0)
              (\e,0.1) -- (\e,-0.1) node[label=south: \footnotesize $e_{R_{\name}}$ ]{}
              (\l,0.1) -- (\l,-0.1) node[label=south: \footnotesize $l_{R_{\name}}$ ]{};
    }
    \foreach \name/\x/\text[remember=\text as \prevtext (initially 14)] in {4/15/14, 32/10/13, 31/7.5/13, 2/4.2/12, 1/1/11} 
    {
        \node[vertex] (V-\name) at (\x,0) {$R_{\text}$};
        \draw[dotted] (\x-0.3,0) -- (\x-0.3,-2);
        \ifnum\name=4\relax\else
            \ifnum\name=31\relax\else
                \draw[->] (\x-0.3,-1.5) let \p1 = ($(PPA-\prevtext)-(PPE-\prevtext)$) in -- ++({veclen(\x1,\y1)},0) node{PPA-\prevtext};
            \fi
        \fi
        \ifnum\name=31\relax\else\draw[->] (\x-0.3,-1) -- (PPE-\text);\fi
    } 
    \foreach \from/\to/\fname/\tname in {1/2/1/2,2/31/2/3,32/4/3/4}
        \draw[->] (V-\from) to[out=30,in=150] node[above,sloped] {$d_{R_{1\fname}R_{1\tname}}$} (V-\to);
    \end{scope}
    \end{tikzpicture}
\end{document}

相关内容