summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pictochrono/tex/pictochrono.sty
blob: d12e83ba0a43c6f0d9fc2d62ce7ccf70200b5eef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
% Author        : C. Pierquet
% licence       : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pictochrono}[2024/02/13 0.1.0 Inline chronometer, made with tikz]

%====HISTORY
% v 0.1.0	Initial version

%====BASE
\RequirePackage{tikz}
\usetikzlibrary{calc}
\RequirePackage{calc}
\RequirePackage{simplekv}
\RequirePackage{xstring}
\RequirePackage{etoolbox}

%====DIMENSIONS
\newlength{\tmp@chrono@hauteur@totale}
\newlength{\tmp@chrono@profondeur}
\newlength{\tmp@chrono@offset}

%====KEYS
\defKV[chronotikz]{Color=\def\colchrono{#1},Height=\def\hautchrono{#1},Delta=\def\deltachrono{#1},ColTime=\def\coltimechrono{#1},Offset=\def\raisechrono{#1}}
\setKVdefault[chronotikz]{Color=black,Height=auto,Delta=5,ColTime=lightgray,Offset=auto}

%====INTERNAL MACRO
\newcommand\tmp@chrono@draw{%
	\draw[\colchrono,line width={\echellechronotraits\tmp@chrono@hauteur@totale}] (0,0) circle[radius=1] ;
	%rules
	\filldraw[line width={\echellechronotraits\tmp@chrono@hauteur@totale},\colchrono,rounded corners={\echellechronoarrondis\tmp@chrono@hauteur@totale}] (65:1)--(65:1.15)--(57.5:1.15)--(57.5:1)--cycle ;
	\filldraw[line width={\echellechronotraits\tmp@chrono@hauteur@totale},\colchrono,rounded corners={\echellechronoarrondis\tmp@chrono@hauteur@totale}] (115:1)--(115:1.15)--(122.5:1.15)--(122.5:1)--cycle ;
	\filldraw[line width={\echellechronotraits\tmp@chrono@hauteur@totale},\colchrono,line join=round,rounded corners={\echellechronoarrondis\tmp@chrono@hauteur@totale}] (-0.1,1)--++(0,0.2)-|++(-0.15,0.15)--++(0.5,0)|-++(-0.15,-0.15)--++(0,-0.2)--cycle ;
}

%====MAIN MACRO
\NewDocumentCommand\pictochrono{ O{} m D<>{} }{%1:=options,2=durée,3=baseline tikz
	\restoreKV[chronotikz]%
	\setKV[chronotikz]{#1}%
	%calcul des dimensions
	\def\echellechronotraits{0.037}%
	\def\echellechronoarrondis{0.003}%
	\IfStrEqCase{\deltachrono}{%
		{10}{\def\tmp@gen@traits{90,150,210,270,330,30}}%
		{15}{\def\tmp@gen@traits{0,90,180,270}}%
		{20}{\def\tmp@gen@traits{90,210,330}}%
		{30}{\def\tmp@gen@traits{90,270}}%
	}%
		[\def\tmp@gen@traits{0,30,60,90,120,150,180,210,240,270,300,330}]%
	%option tikz
	\ifstrempty{#3}%
		{%
			\tikzset{chronoalign/.style={}}%
		}%
		{%
			\IfStrEqCase{#3}{%
				{vcenter}{\tikzset{chronoalign/.style={baseline=(current bounding box.center)}}}%
				{vtop}{\tikzset{chronoalign/.style={baseline=(current bounding box.north)}}}%
				{vbottom}{\tikzset{chronoalign/.style={baseline=(current bounding box.south)}}}%
			}%
				[\tikzset{chronoalign/.style={}}]%
		}%
	%hauteur auto ou non
	\IfStrEq{\hautchrono}{auto}%
		{%
			\settototalheight{\tmp@chrono@hauteur@totale}{\hbox{qB}}%
			\settodepth{\tmp@chrono@profondeur}{\hbox{q}}%
			\IfStrEq{\raisechrono}{auto}%
				{%
					\setlength{\tmp@chrono@offset}{-\tmp@chrono@profondeur}%
				}%
				{%
					\setlength{\tmp@chrono@offset}{-\raisechrono}%
				}%
			%envt
			\raisebox{\tmp@chrono@offset}{%
				\begin{tikzpicture}[x={0.4125\tmp@chrono@hauteur@totale},y={0.4125\tmp@chrono@hauteur@totale},transform shape,chronoalign]
					%time
					\IfEq{#2}{}{}{\filldraw[rounded corners={\echellechronoarrondis\tmp@chrono@hauteur@totale},\coltimechrono,draw=none] (0,0)--({90-6*(#2)}:0.9) arc ({90-6*(#2)}:90:0.9)--cycle ;}%
					%rules
					\IfStrEq{\deltachrono}{0}%
						{}%
						{\foreach \i in \tmp@gen@traits {\draw[\colchrono,line width={\echellechronotraits\tmp@chrono@hauteur@totale}] (\i:0.6)--(\i:0.85);}}%
					%clock
					\tmp@chrono@draw
				\end{tikzpicture}%
			}%
		}%
		{%
			\IfStrEq{\raisechrono}{auto}%
				{%
					\setlength{\tmp@chrono@offset}{0pt}%
				}%
				{%
					\setlength{\tmp@chrono@offset}{\raisechrono}%
				}%
			\setlength{\tmp@chrono@hauteur@totale}{\hautchrono}%
			\raisebox{\tmp@chrono@offset}{%
				\begin{tikzpicture}[x={0.4125\tmp@chrono@hauteur@totale},y={0.4125\tmp@chrono@hauteur@totale},transform shape,chronoalign]
					%time
					\IfEq{#2}{}{}{\filldraw[rounded corners={\echellechronoarrondis\tmp@chrono@hauteur@totale},\coltimechrono,draw=none] (0,0)--({90-6*(#2)}:0.9) arc ({90-6*(#2)}:90:0.9)--cycle ;}%
					%rules
					\IfStrEq{\deltachrono}{0}%
						{}%
						{\foreach \i in \tmp@gen@traits {\draw[\colchrono,line width={\echellechronotraits\tmp@chrono@hauteur@totale}] (\i:0.6)--(\i:0.85);}}%
					%clock
					\tmp@chrono@draw
				\end{tikzpicture}%
			}%
		}%
}

\endinput