Здравствуйте, мне относительно часто приходится использовать линии вида "половина пунктирной -- половина сплошной с точкой посередине". Чтобы каждый раз не заморачиваться, решил создать такой класс с помощью
tikzset. Выглядит это примерно вот так:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\tikzset{
clq/.style={thick, style=dashed, draw=black,postaction={decorate},postaction={draw,thick,solid,shorten >= 5ex}, decoration={markings,mark=at position .5 with {\draw[black,fill=black] circle (.5ex);}}}
}
\begin{document}
\begin{tikzpicture}
\draw[clq] (-5ex,0) -- (5ex,0);
\end{tikzpicture}
\end{document}
Для того чтобы сделать линию наполовину пунктирной, наполовину сплошной, я решил использовать костыль в виде
shorten: то есть я сначала рисуется пунктирная линия, а потом с помощью
postaction поверх проводится сплошная линия, начиная с
5ex. Достигается это как раз за счёт
postaction={draw,thick,solid,shorten >= 5ex}. Проблема в том, что здесь, очевидно, есть привязка к определённой длине линии: только при длине
5ex пунктирная и сплошная части будут одинаковой длины. Есть ли какая-то возможность вычленить длину линии в качестве параметра? Ну, чтобы можно было сделать что-то вроде
postaction={draw,thick,solid,shorten >= 0.5*totallength}. Сколько ни пытался, у меня ничего так и не получилось... Но вот присутствие
mark=at position .5 наводит на мысль, что это точно должно быть возможно, потому что тут-то ведь понимает точечка, что ей надо встать посередине (вне зависимости от длины линии). Заранее спасибо за помощь.