tikz で線の色を変更するマクロ

tikz で線の色を変更するマクロ

私は tikz と LaTeX のマクロの両方に不慣れなので、ご協力をお願いします。次のような 2 つの類似した図の簡単なコードがあります。

\documentclass{article}
\usepackage{tikz}

\newcommand\tpdrrr{
\tikz{
\draw [dashed] (-1.5,.5) arc (90:-90:.5); % q1 right inner arc
\draw [red,thick] (-1.5,.5) arc (90:270:.5); % q2 left inner arc
\draw  [red,thick]  (-1.5,-.5) -- (-1.5,-1); % q3 vertical top
\draw  [red,thick] (-1.5,.5) -- (-1.5,0); % q4 inner vertical

}
}

\newcommand\tprdrr{
\tikz{
\draw [red,thick] (-1.5,.5) arc (90:-90:.5); % q1 right inner arc
\draw [dashed] (-1.5,.5) arc (90:270:.5); % q2 left inner arc
\draw  [red,thick]  (-1.5,-.5) -- (-1.5,-1); % q3 vertical top
\draw  [red,thick] (-1.5,.5) -- (-1.5,0); % q4 inner vertical

}
}

\begin{document}

\[\tprdrr + \tpdrrr \]

\end{document}

これら 2 つを 1 つのマクロとして組み合わせて、線のスタイル (破線 vs. 赤、太線) を引数として渡すことができるように手伝ってくれる人はいませんか。つまり、たとえば を受け取り\tp{r}{d}{r}{r}、現在の の結果を出力するコードです。 、など\tprdrrのより多くの構成を使用したいので、マクロは非常に便利です。\tp{r}{r}{r}{r}\t{d}{d}{d}{d}

答え1

パッケージを使用すると、ifthenより短い 1 文字のパラメータを記述できます。ここでは、rについてはred, thick、 については他の任意の文字ですdashedが、dも十分です。

\documentclass{article}
\usepackage{tikz}

\usepackage{ifthen}
\newcommand{\tp}[4]{
\tikz{%
\ifthenelse{\equal{#1}{r}}
    {\draw [red,thick] (-1.5,.5) arc (90:-90:.5); }
    {\draw [dashed] (-1.5,.5) arc (90:-90:.5); }

\ifthenelse{\equal{#2}{r}}
    {\draw [red,thick] (-1.5,.5) arc (90:270:.5);  }
    {\draw [dashed] (-1.5,.5) arc (90:270:.5);  }
    
\ifthenelse{\equal{#3}{r}}
    {\draw [red,thick] (-1.5,-.5) -- (-1.5,-1);   }
    {\draw [dashed] (-1.5,-.5) -- (-1.5,-1);   }
    
  \ifthenelse{\equal{#4}{r}}
    {\draw [red,thick] (-1.5,.5) -- (-1.5,0);   }
    {\draw [dashed] (-1.5,.5) -- (-1.5,0);   }  
     
}
}
\begin{document}


\tp{r}{d}{r}{r} + \tp{d}{r}{r}{r} + \tp{r}{r}{r}{r} + \tp{d}{d}{d}{d}

\end{document}

ここに画像の説明を入力してください

答え2

単一のマクロでニーズに合わせたアプリケーションとして。

ここに画像の説明を入力してください

\documentclass{article}
\usepackage{tikz}

\newcommand{\tp}[4]{
\tikz{%
    \draw [#1] (-1.5,.5) arc (90:-90:.5); 
    \draw [#2] (-1.5,.5) arc (90:270:.5); 
    \draw [#3] (-1.5,-.5) -- (-1.5,-1); 
    \draw [#4] (-1.5,.5) -- (-1.5,0); 
}
}

\begin{document}

\[
    \tp{red,thick}{dashed}{red,thick}{red,thick} % <= tprdrr
\]

\[
    \tp{dashed}{red,thick}{red,thick}{red,thick} % <= \tpdrrr
\]

\[
    \tp{red,thick}{red,thick}{red,thick}{red,thick} % <=  all parts are red and thick
\]

\[
    \tp{dashed}{dashed}{dashed}{dashed} % <=  all parts are dashed
\]

\end{document}

しかし、その繰り返し回数を見ると、改善の余地があることがわかります :)

関連情報