如何根据变量更改 \tikzstyle 参数

如何根据变量更改 \tikzstyle 参数

我正在尝试定义一个文档,其中有不同级别的内容包含在 TikZ 框中,如下所示;想法是每个框都应该根据计数器的值(显示在每个矩形顶部的圆圈内)获得一种颜色。 文档结构 这是我的代码的摘录:


documentclass[10pt]{book}

\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{engrec}
\usepackage{yfonts}

%\usepackage[a4paper, inner=1cm, width=19cm, top=1cm, bottom=2cm, marginpar=0pt, twoside, showframe]{geometry}
\usepackage[a4paper, inner=1cm, width=19cm, top=1cm, bottom=2cm, marginpar=0pt, twoside]{geometry}

\usepackage{xparse}
\usepackage{xcolor}
\usepackage{xspace}

\usepackage{ifthen}

\usepackage{environ}

\usepackage{tikz}
\usetikzlibrary{
    positioning,
    fit,
    arrows,
    arrows.meta,
    intersections,
    decorations,
    backgrounds,
    calc,
    math,
    through,
    shapes,
    shadows,
    decorations.pathmorphing
}

\usepackage{lipsum}

\setmainfont{Tisa OT}
\setsansfont{TeX Gyre Heros Cn}
\setdefaultlanguage{italian}

\definecolor{conceptcolor}{RGB}{160,44,90}
\definecolor{subconceptcolora}{RGB}{255,102,0}
\definecolor{subconceptcolorb}{RGB}{95,95,211}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                           %
%       CONCEPT BOX         %
%                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{conceptctr}
\renewcommand{\theconceptctr}{\Alph{conceptctr}}

\tikzstyle{conceptboxtitlesty} = 
    [
        circle,%
        draw = conceptcolor,%
        line width = 0.7mm,%
        node font = \Huge\bfseries\sffamily,%
        text = conceptcolor,%
        fill = white,%
        inner sep = 3pt%
    ]
\tikzstyle{conceptboxsty} = 
    [
        rectangle,
        rounded corners = 10pt,%
        draw = conceptcolor,
        line width = 0.7mm,%
        node font = \small
    ]
%
\NewEnviron{conceptbox}{
    \stepcounter{conceptctr}
    \begin{tikzpicture}
        \node[conceptboxsty, anchor=north west](concepttext) at (-6,0) {
            \begin{minipage}{18cm}
                \vspace{20pt}
                \BODY
            \end{minipage}
            \vspace{20pt}
        };
        \node[conceptboxtitlesty, xshift = 2cm](conecepttitle) at (concepttext.north west){\theconceptctr};

    \end{tikzpicture}
}[\newline]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                           %
%      SUBCONCEPT BOX       %
%                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{subconceptctr}[conceptctr]
\renewcommand{\thesubconceptctr}{\arabic{subconceptctr}}
\newcommand{\subconceptcolor}[1]
    {%
       \ifthenelse{#1 = 1}%
          {subconceptcolora}%
            {%
                \ifthenelse{#1 = 2}%
                {subconceptcolorb}%
                {}%% &c.
            }%
    }

\tikzstyle{subconcepttitlesty} = 
    [
        circle,%
        draw = \currentcolor,%
        line width = 0.5mm,%
        node font = \LARGE\bfseries\sffamily,%
        text = \currentcolor,%
        fill = white,%
        inner sep = 3pt%
    ]
    \tikzstyle{subconceptboxsty} = 
    [
        rectangle,
        rounded corners = 10pt,%
        draw = \currentcolor,
        line width = 0.5mm,%
        node font = \small%
    ]
%
\newcommand{\currentcolor}{}
\NewEnviron{subconceptbox}{
    \stepcounter{subconceptctr}
    \renewcommand{\currentcolor}{\subconceptcolor{\value{subconceptctr}}}
    \begin{tikzpicture}
        \node[subconceptboxsty,
            anchor=north west,
            ](subconcepttext) at (0,-1) {
            \begin{minipage}{17.5cm}
                \vspace{20pt}
                \BODY
                \vspace{10pt}
            \end{minipage}
        };%
        \node[subconcepttitlesty,
            anchor = center,
            xshift = 2cm, yshift = 0cm](subconecepttitle) at (subconcepttext.north west){\thesubconceptctr};%
    \end{tikzpicture}
}[\newline]

\begin{document}
    \begin{conceptbox}
        Il C. è \textsl{similitudo rei in mente expressa} (cioè la rappresentazione di una cosa espressa nella mente). Infatti, essa è il prodotto dell' \textsl{apprensione}, ovvero della prima operazione della mente che astrae, mediante i sensi, una rappresentazione universale di ciò che si osserva fuori di noi.\\\newline

        \begin{subconceptbox}
            Il C. ci rimanda immediatamente alla realtà e non allo stesso C. Esso significa ciò che la cosa è secondo un aspetto determinato (i.e., il concetto di "relazione" ci porta a capire cos' è una relazione; quello di "tartaruga", a capire cos' è una tartaruga). Ciò non implica una totale comprensione della natura, né che siamo capaci di definirla, ma senz' altro comporta una certa intellezione.
        \end{subconceptbox}

        \begin{subconceptbox}
            Ciò che caratterizza il C. è la sua \textit{\textbf{Universalità}}: quanto è espresso dal C. vale per tutti e per sempre, grazie al fatto che considera tutte le note essenziali che tutti gl' individui devono possedere. Grazie all' Universalità abbiamo i seguenti risultati:\par%            
        \end{subconceptbox}

    \end{conceptbox}
\end{document}

我看了一下这个问题: 如何向 \tikzstyle 传递参数?; 还有这些TikZ 图内的 If-then-else?TikZ 图内的 If-then-else?
所以我的理解是\ifthenelseTikZ 无法识别该命令;因此我尝试将条件的值传递给变量 ( \currentcolor),我认为该变量在调用环境之前应该已经初始化tikzpicture
然而,我在编译过程中得到的是一堆 (166) 个错误。
有什么建议吗?感谢您的支持。

答案1

\tikzstyle已弃用。我没有安装您的字体,但它们与问题无关。\ifthen不可扩展,但在当前情况下,您只需要\ifodd。对于更复杂的情况,您可以使用 pgf 来定义颜色。

\documentclass[10pt]{book}
\usepackage[a4paper, inner=1cm, width=19cm, top=1cm, bottom=2cm, marginpar=0pt, twoside]{geometry}

\usepackage{environ}

\usepackage{tikz}
\usetikzlibrary{
    positioning,
    fit,
    arrows,
    arrows.meta,
    intersections,
    decorations,
    backgrounds,
    calc,
    math,
    through,
    shapes,
    shadows,
    decorations.pathmorphing
}

\usepackage{lipsum}
\definecolor{conceptcolor}{RGB}{160,44,90}
\definecolor{subconceptcolora}{RGB}{255,102,0}
\definecolor{subconceptcolorb}{RGB}{95,95,211}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                           %
%       CONCEPT BOX         %
%                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{conceptctr}
\renewcommand{\theconceptctr}{\Alph{conceptctr}}

\tikzset{conceptboxtitlesty/.style={
        circle,%
        draw = conceptcolor,%
        line width = 0.7mm,%
        node font = \Huge\bfseries\sffamily,%
        text = conceptcolor,%
        fill = white,%
        inner sep = 3pt%
    },
conceptboxsty/.style={
        rectangle,
        rounded corners = 10pt,%
        draw = conceptcolor,
        line width = 0.7mm,%
        node font = \small
    }}
%
\NewEnviron{conceptbox}{
    \stepcounter{conceptctr}
    \begin{tikzpicture}
        \node[conceptboxsty, anchor=north west](concepttext) at (-6,0) {
            \begin{minipage}{18cm}
                \vspace{20pt}
                \BODY
            \end{minipage}
            \vspace{20pt}
        };
        \node[conceptboxtitlesty, xshift = 2cm](conecepttitle) at (concepttext.north west){\theconceptctr};

    \end{tikzpicture}
}[\newline]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                           %
%      SUBCONCEPT BOX       %
%                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{subconceptctr}[conceptctr]
\renewcommand{\thesubconceptctr}{\arabic{subconceptctr}}

\tikzset{subconcepttitlesty/.style={
        circle,%
        draw = \currentcolor,%
        line width = 0.5mm,%
        node font = \LARGE\bfseries\sffamily,%
        text = \currentcolor,%
        fill = white,%
        inner sep = 3pt%
    },
subconceptboxsty/.style={
        rectangle,
        rounded corners = 10pt,%
        draw = \currentcolor,
        line width = 0.5mm,%
        node font = \small%
    }}
%
\newcommand{\currentcolor}{}

\NewEnviron{subconceptbox}{
    \stepcounter{subconceptctr}
    \ifodd\value{subconceptctr}
    \renewcommand{\currentcolor}{subconceptcolora}
    \else
    \renewcommand{\currentcolor}{subconceptcolorb}
    \fi
    \begin{tikzpicture}
        \node[subconceptboxsty,
            anchor=north west,
            ](subconcepttext) at (0,-1) {
            \begin{minipage}{17.5cm}
                \vspace{20pt}
                \BODY
                \vspace{10pt}
            \end{minipage}
        };%
        \node[subconcepttitlesty,
            anchor = center,
            xshift = 2cm, yshift = 0cm](subconecepttitle) at (subconcepttext.north west){\thesubconceptctr};%
    \end{tikzpicture}
}[\newline]

\begin{document}
    \begin{conceptbox}
        Il C. \`e \textsl{similitudo rei in mente expressa} (cio\`e la
        rappresentazione di una cosa espressa nella mente). Infatti,
        essa \`e il prodotto dell' \textsl{apprensione}, ovvero della
        prima operazione della mente che astrae, mediante i sensi, una
        rappresentazione universale di ci\`o che si osserva fuori di noi.\\\newline

        \begin{subconceptbox}
            Il C. ci rimanda immediatamente alla realt\`a e non allo stesso C.
Esso significa ci\`o che la cosa e secondo un aspetto determinato (i.e., il
concetto di "relazione" ci porta a capire cos' \`e una relazione; quello di
"tartaruga", a capire cos' \`e una tartaruga). Ci\`o non implica una totale
comprensione della natura, n\'e che siamo capaci di definirla, ma senz' altro
comporta una certa intellezione.
        \end{subconceptbox}

        \begin{subconceptbox}
            Cio che caratterizza il C. \`e la sua
\textit{\textbf{Universalit\'a}}: quanto \`e espresso dal C. vale per tutti e
per sempre, grazie al fatto che considera tutte le note essenziali che tutti gl'
individui devono possedere. Grazie all' Universalita abbiamo i seguenti
risultati:\par%            
        \end{subconceptbox}

\end{conceptbox}
\end{document}

在此处输入图片描述

请注意,使用tcolorbox将是创建这些框架的更好方法。这个答案只是为了从代码中删除错误,而不是提供代码tcolorbox,但我认为这会更有意义。

相关内容