
Я новичок как в tikz, так и в макросах в latex и ценю вашу помощь. У меня есть простой код для двух похожих диаграмм, как показано ниже:
\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}
Может ли кто-нибудь помочь мне объединить эти два в один макрос, где я могу передать стиль линии (пунктирная или красная, толстая) в качестве аргумента, т. е. код, который принимает, например, \tp{r}{d}{r}{r}
и выводит результат моего текущего \tprdrr
? Я хочу использовать больше конфигураций, например \tp{r}{r}{r}{r}
, \t{d}{d}{d}{d}
и т. д., поэтому макрос был бы очень полезен
решение1
Использование пакета ifthen
позволяет писать более короткие однобуквенные параметры. Здесь 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}
Но когда вы видите так много повторений... это значит, что это можно улучшить :)