190 lines
5.2 KiB
TeX
Executable File
190 lines
5.2 KiB
TeX
Executable File
%% Dimension line for LaTeX/TikZ
|
||
%% Copyright © 2013 Sébastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>
|
||
%%
|
||
%% This file may be distributed and/or modified
|
||
%%
|
||
%% 1. under the LaTeX Project Public License and/or
|
||
%% 2. under the WTF Public License.
|
||
%%
|
||
%%
|
||
%% This simplify the creation drawing of dimension arrows.
|
||
%%
|
||
%%
|
||
%% To install it copy the tango directory to either:
|
||
%% - $TEXHOME/tex/latex/
|
||
%% - ~/texmf/tex/latex/
|
||
%% - ~/Library/texmf/tex/latex
|
||
%%
|
||
|
||
\NeedsTeXFormat{LaTeX2e}
|
||
\ProvidesPackage{tikz-dimline}[2013/03/13 v1.0 initial version]
|
||
|
||
\RequirePackage{tikz}
|
||
\RequirePackage{pgfplots}
|
||
\RequirePackage{ifthen}
|
||
|
||
\usetikzlibrary{calc,decorations.markings,arrows}
|
||
|
||
\makeatletter
|
||
|
||
|
||
|
||
\pgfkeys {
|
||
/dimline/.cd,
|
||
execute style/.style = {#1},
|
||
execute macro/.style = {/dimline/execute style/.expand once=#1},
|
||
}
|
||
|
||
|
||
\newdimen\dimline@arrow@linewidth
|
||
|
||
\pgfarrowsdeclare{dimline}{dimline}
|
||
{
|
||
\arrowsize=1\pgflinewidth
|
||
\pgfarrowsleftextend{0\arrowsize}
|
||
\pgfarrowsrightextend{5\arrowsize}
|
||
} {
|
||
\arrowsize=1\pgflinewidth
|
||
\pgfsetdash{}{0pt} % do not dash
|
||
% |
|
||
\pgfsetlinewidth{.5\arrowsize}
|
||
\pgfpathmoveto{\pgfpoint{4.75\arrowsize}{3\arrowsize}}
|
||
\pgfpathlineto{\pgfpoint{4.75\arrowsize}{-3\arrowsize}}
|
||
\pgfusepathqstroke
|
||
% >
|
||
\pgfsetlinewidth{0.01pt}
|
||
\pgfpathmoveto{\pgfpoint{4.5\arrowsize}{0pt}}
|
||
\pgfpathlineto{\pgfpoint{-3\arrowsize}{2\arrowsize}}
|
||
\pgfpathlineto{\pgfpoint{-3\arrowsize}{-2\arrowsize}}
|
||
\pgfpathclose
|
||
\pgfusepathqfillstroke
|
||
}
|
||
|
||
|
||
\pgfarrowsdeclare{dimline reverse}{dimline reverse}
|
||
{
|
||
\arrowsize=1\pgflinewidth
|
||
\pgfarrowsleftextend{-5\arrowsize}
|
||
\pgfarrowsrightextend{0\arrowsize}
|
||
} {
|
||
\arrowsize=1\pgflinewidth
|
||
\pgfsetdash{}{0pt} % do not dash
|
||
% |
|
||
\pgfsetlinewidth{0.5\arrowsize}
|
||
\pgfpathmoveto{\pgfpoint{-0.25\arrowsize}{3\arrowsize}}
|
||
\pgfpathlineto{\pgfpoint{-0.25\arrowsize}{-3\arrowsize}}
|
||
\pgfusepathqstroke
|
||
% >
|
||
\pgfsetlinewidth{0.01pt}
|
||
\pgfpathmoveto{\pgfpoint{0pt}{0pt}}
|
||
\pgfpathlineto{\pgfpoint{7.5\arrowsize}{2\arrowsize}}
|
||
\pgfpathlineto{\pgfpoint{7.5\arrowsize}{-2\arrowsize}}
|
||
\pgfpathclose
|
||
\pgfusepathqfillstroke
|
||
}
|
||
|
||
|
||
% measure lenght
|
||
% http://tex.stackexchange.com/questions/123913
|
||
|
||
|
||
\newcommand{\dimline@do@nothing}[1]{#1}%
|
||
% http://tex.stackexchange.com/questions/58283/tikz-how-to-determine-the-vector-between-two-co-ordinates
|
||
|
||
|
||
% #1: optional keys parameters
|
||
% #2: start point
|
||
% #3: end point
|
||
% #4: text
|
||
\newcommand{\dimline}[4][]{%
|
||
|
||
\pgfplotsifinaxis{%
|
||
\let\dimline@internal\pgfplotsextra%
|
||
}{%
|
||
\let\dimline@internal\dimline@do@nothing%
|
||
}%
|
||
|
||
\dimline@internal{
|
||
\pgfkeys{
|
||
dimline/.is family,
|
||
dimline,
|
||
color/.initial = black,
|
||
extension start length/.initial=1cm,
|
||
extension end length/.initial=1cm,
|
||
extension start angle/.initial=-90,
|
||
extension end angle/.initial=90,
|
||
line style/.initial = {},
|
||
label style/.initial = {},
|
||
extension style/.initial = {},
|
||
extension start style/.initial = {},
|
||
extension start path/.initial = {},
|
||
extension end style/.initial = {},
|
||
extension end path/.initial = {},
|
||
#1,
|
||
line style/.get = \dimline@line@style,
|
||
label style/.get = \dimline@label@style,
|
||
extension style/.get = \dimline@extension@style,
|
||
extension start style/.get = \dimline@extension@start@style,
|
||
extension start path/.get = \dimline@extension@start@path,
|
||
extension end style/.get = \dimline@extension@end@style,
|
||
extension end path/.get = \dimline@extension@end@path,
|
||
}
|
||
|
||
\begin{scope} [
|
||
line/.style = {
|
||
color=\pgfkeysvalueof{/dimline/color},
|
||
arrows=dimline-dimline,
|
||
/dimline/execute macro = \dimline@line@style,
|
||
},
|
||
extension/.style = {
|
||
color=\pgfkeysvalueof{/dimline/color}!40, line width=0.01,
|
||
/dimline/execute macro = \dimline@extension@style,
|
||
},
|
||
extension start/.style = {
|
||
extension,
|
||
/dimline/execute macro = \dimline@extension@start@style
|
||
},
|
||
extension end/.style = {
|
||
extension,
|
||
/dimline/execute macro = \dimline@extension@end@style,
|
||
},
|
||
label/.style = {
|
||
fill=white, align=center, sloped=true, pos=0.5,
|
||
/dimline/execute macro = \dimline@label@style
|
||
},
|
||
]
|
||
|
||
\coordinate (a) at #2 {};
|
||
\coordinate (b) at #3 {};
|
||
|
||
\ifthenelse{\equal{\dimline@extension@start@path}{}}{
|
||
\coordinate (a to b) at ($(a)!\pgfkeysvalueof{/dimline/extension start length}!\pgfkeysvalueof{/dimline/extension start angle}:(b)$);
|
||
\draw [extension start] (a.center) -- (a to b);
|
||
} {
|
||
\draw [extension start] plot coordinates {\dimline@extension@start@path};
|
||
}
|
||
|
||
\ifthenelse{\equal{\dimline@extension@end@path}{}}{
|
||
\coordinate (b to a) at ($(b)!\pgfkeysvalueof{/dimline/extension end length}!\pgfkeysvalueof{/dimline/extension end angle}:(a)$);
|
||
\draw [extension end] (b.center) -- (b to a);
|
||
} {
|
||
\draw [extension end] plot coordinates {\dimline@extension@end@path};
|
||
}
|
||
|
||
\draw[line] (a.center) -- (b.center) node[label] {#4};
|
||
\end{scope}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
\@ifclassloaded{beamer}{%
|
||
\renewcommand<>{\dimline}[4][]{\only#5{\beameroriginal{\dimline}[#1]{#2}{#3}{#4}}}
|
||
}
|
||
\makeatother
|
||
|
||
|
||
\endinput
|
||
%% tikz-dimline.sty ends here.
|
||
|