535 lines
13 KiB
TeX
Executable File
535 lines
13 KiB
TeX
Executable File
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{sliderule}[2022/08/22 Slide rule tools]
|
|
|
|
\RequirePackage{tikz}
|
|
\RequirePackage{ifthen}
|
|
|
|
|
|
% Scale functions:
|
|
% See https://sliderulemuseum.com/SR_Scales.htm
|
|
%
|
|
% l: length of the rule
|
|
% n: the number on the rule
|
|
%
|
|
% A/B: (l/2) * log(n)
|
|
% C/D: l / log(n)
|
|
% CI: abs(l * log(10 / n) - l)
|
|
% K: (l/3) * log(n)
|
|
%
|
|
% L: n * l
|
|
% T: l * log(10 * tan(n))
|
|
% S: l * log(10 * sin(n))
|
|
|
|
\def\sliderulewidth{10}
|
|
|
|
\def\abscalefn(#1){(\sliderulewidth/2) * log10(#1)}
|
|
\def\cdscalefn(#1){(\sliderulewidth * log10(#1))}
|
|
\def\ciscalefn(#1){(\sliderulewidth - \cdscalefn(#1))}
|
|
\def\kscalefn(#1){(\sliderulewidth/3) * log10(#1)}
|
|
\def\lscalefn(#1){(\sliderulewidth * #1)}
|
|
\def\tscalefn(#1){(\sliderulewidth * log10(10 * tan(#1)))}
|
|
\def\sscalefn(#1){(\sliderulewidth * log10(10 * sin(#1)))}
|
|
|
|
|
|
% Arguments:
|
|
% Label
|
|
% x of start
|
|
% y of start
|
|
\newcommand{\linearscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks
|
|
\foreach \i in {0,..., 10}{
|
|
\draw[black]
|
|
({#1 + (\sliderulewidth / 10) * \i}, #2) --
|
|
({#1 + (\sliderulewidth / 10) * \i}, #2 + 0.3)
|
|
node[above] {\i};
|
|
}
|
|
|
|
% Submarks
|
|
\foreach \n in {0, ..., 9} {
|
|
\foreach \i in {1,..., 9} {
|
|
\ifthenelse{\i=5}{
|
|
\draw[black]
|
|
({#1 + (\sliderulewidth / 10) * (\n + \i / 10)}, #2) --
|
|
({#1 + (\sliderulewidth / 10) * (\n + \i / 10)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + (\sliderulewidth / 10) * (\n + \i / 10)}, #2) --
|
|
({#1 + (\sliderulewidth / 10) * (\n + \i / 10)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
% Arguments:
|
|
% Label
|
|
% x of start
|
|
% y of start
|
|
\newcommand{\abscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks 1 - 9
|
|
\foreach \i in {1,..., 9}{
|
|
\draw[black]
|
|
({#1 + \abscalefn(\i)}, #2) --
|
|
({#1 + \abscalefn(\i)}, #2 + 0.3)
|
|
node[above] {\i};
|
|
}
|
|
% Numbers and marks 10 - 100
|
|
\foreach \i in {1,..., 10}{
|
|
\draw[black]
|
|
({#1 + \abscalefn(10 * \i)}, #2) --
|
|
({#1 + \abscalefn(10 * \i)}, #2 + 0.3)
|
|
node[above] {\ifthenelse{\i=10}{1}{\i}};
|
|
}
|
|
|
|
% Submarks 1 - 9
|
|
\foreach \n in {1, ..., 9} {
|
|
\ifthenelse{\n<5}{
|
|
\foreach \i in {1,..., 9}
|
|
} {
|
|
\foreach \i in {2,4,6,8}
|
|
}
|
|
{
|
|
\ifthenelse{\i=5}{
|
|
\draw[black]
|
|
({#1 + \abscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \abscalefn(\n + \i / 10)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \abscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \abscalefn(\n + \i / 10)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 10 - 100
|
|
\foreach \n in {10,20,...,90} {
|
|
\ifthenelse{\n<50}{
|
|
\foreach \i in {1,..., 9}
|
|
} {
|
|
\foreach \i in {2,4,6,8}
|
|
}
|
|
{
|
|
\ifthenelse{\i=5}{
|
|
\draw[black]
|
|
({#1 + \abscalefn(\n + \i)}, #2) --
|
|
({#1 + \abscalefn(\n + \i)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \abscalefn(\n + \i)}, #2) --
|
|
({#1 + \abscalefn(\n + \i)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
\newcommand{\cdscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks 1 - 10
|
|
\foreach \i in {1,..., 10}{
|
|
\draw[black]
|
|
({#1 + \cdscalefn(\i)}, #2) --
|
|
({#1 + \cdscalefn(\i)}, #2 + 0.3)
|
|
node[above] {\ifthenelse{\i=10}{1}{\i}};
|
|
}
|
|
|
|
% Submarks 1 - 9
|
|
\foreach \n in {1, ..., 9} {
|
|
\ifthenelse{\n<3}{
|
|
\foreach \i in {5,10,...,95}
|
|
} {
|
|
\foreach \i in {10,20,...,90}
|
|
}
|
|
{
|
|
\ifthenelse{\i=50}{
|
|
\draw[black]
|
|
({#1 + \cdscalefn(\n + \i / 100)}, #2) --
|
|
({#1 + \cdscalefn(\n + \i / 100)}, #2 + 0.2);
|
|
\ifthenelse{\n=1}{
|
|
\draw
|
|
({#1 + \cdscalefn(\n + \i / 100)}, #2 + 0.2)
|
|
node [above] {1.5};
|
|
}{}
|
|
} {
|
|
\ifthenelse{
|
|
\i=10 \OR \i=20 \OR \i=30 \OR \i=40 \OR
|
|
\i=60 \OR \i=70 \OR \i=80 \OR \i=90
|
|
}{
|
|
\draw[black]
|
|
({#1 + \cdscalefn(\n + \i / 100)}, #2) --
|
|
({#1 + \cdscalefn(\n + \i / 100)}, #2 + 0.15);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \cdscalefn(\n + \i / 100)}, #2) --
|
|
({#1 + \cdscalefn(\n + \i / 100)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
\newcommand{\ciscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks
|
|
\foreach \i in {1,...,10}{
|
|
\draw[black]
|
|
({#1 + \ciscalefn(\i)}, #2) --
|
|
({#1 + \ciscalefn(\i)}, #2 + 0.3)
|
|
node[above] {\ifthenelse{\i=10}{1}{\ifthenelse{\i=0}{0}{.\i}}};
|
|
}
|
|
|
|
% Submarks 1 - 9
|
|
\foreach \n in {1, ..., 9} {
|
|
\ifthenelse{\n<3}{
|
|
\foreach \i in {5,10,...,95}
|
|
} {
|
|
\foreach \i in {10,20,...,90}
|
|
}
|
|
{
|
|
\ifthenelse{\i=50}{
|
|
\draw[black]
|
|
({#1 + \ciscalefn(\n + \i / 100)}, #2) --
|
|
({#1 + \ciscalefn(\n + \i / 100)}, #2 + 0.2);
|
|
\ifthenelse{\n=1}{
|
|
\draw
|
|
({#1 + \ciscalefn(\n + \i / 100)}, #2 + 0.2)
|
|
node [above] {1.5};
|
|
}{}
|
|
} {
|
|
\ifthenelse{
|
|
\i=10 \OR \i=20 \OR \i=30 \OR \i=40 \OR
|
|
\i=60 \OR \i=70 \OR \i=80 \OR \i=90
|
|
}{
|
|
\draw[black]
|
|
({#1 + \ciscalefn(\n + \i / 100)}, #2) --
|
|
({#1 + \ciscalefn(\n + \i / 100)}, #2 + 0.15);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \ciscalefn(\n + \i / 100)}, #2) --
|
|
({#1 + \ciscalefn(\n + \i / 100)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
\newcommand{\kscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks 1 - 9
|
|
\foreach \i in {1,...,9}{
|
|
\draw[black]
|
|
({#1 + \kscalefn(\i)}, #2) --
|
|
({#1 + \kscalefn(\i)}, #2 + 0.3)
|
|
node[above] {\i};
|
|
}
|
|
% Numbers and marks 10 - 90
|
|
\foreach \i in {1,..., 9}{
|
|
\draw[black]
|
|
({#1 + \kscalefn(10 * \i)}, #2) --
|
|
({#1 + \kscalefn(10 * \i)}, #2 + 0.3)
|
|
node[above] {\ifthenelse{\i=10}{1}{\i}};
|
|
}
|
|
% Numbers and marks 100 - 1000
|
|
\foreach \i in {1,..., 10}{
|
|
\draw[black]
|
|
({#1 + \kscalefn(100 * \i)}, #2) --
|
|
({#1 + \kscalefn(100 * \i)}, #2 + 0.3)
|
|
node[above] {\ifthenelse{\i=10}{1}{\i}};
|
|
}
|
|
|
|
% Submarks 1 - 9
|
|
\foreach \n in {1, ..., 9} {
|
|
\ifthenelse{\n<4}{
|
|
\foreach \i in {1,..., 9}
|
|
} {
|
|
\foreach \i in {2,4,6,8}
|
|
}
|
|
{
|
|
\ifthenelse{\i=5}{
|
|
\draw[black]
|
|
({#1 + \kscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \kscalefn(\n + \i / 10)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \kscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \kscalefn(\n + \i / 10)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 10 - 90
|
|
\foreach \n in {10,20,...,90} {
|
|
\ifthenelse{\n<40}{
|
|
\foreach \i in {1,..., 9}
|
|
} {
|
|
\foreach \i in {2,4,6,8}
|
|
}
|
|
{
|
|
\ifthenelse{\i=5}{
|
|
\draw[black]
|
|
({#1 + \kscalefn(\n + \i)}, #2) --
|
|
({#1 + \kscalefn(\n + \i)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \kscalefn(\n + \i)}, #2) --
|
|
({#1 + \kscalefn(\n + \i)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 100 - 1000
|
|
\foreach \n in {100,200,...,900} {
|
|
\ifthenelse{\n<400}{
|
|
\foreach \i in {10,20,...,90}
|
|
} {
|
|
\foreach \i in {20,40,60,80}
|
|
}
|
|
{
|
|
\ifthenelse{\i=50}{
|
|
\draw[black]
|
|
({#1 + \kscalefn(\n + \i)}, #2) --
|
|
({#1 + \kscalefn(\n + \i)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \kscalefn(\n + \i)}, #2) --
|
|
({#1 + \kscalefn(\n + \i)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
\newcommand{\lscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks
|
|
\foreach \i in {0,..., 10}{
|
|
\draw[black]
|
|
({#1 + \lscalefn(\i / 10)}, #2) --
|
|
({#1 + \lscalefn(\i / 10)}, #2 + 0.3)
|
|
node[above] {\ifthenelse{\i=10}{1}{\ifthenelse{\i=0}{0}{.\i}}};
|
|
}
|
|
|
|
% Submarks
|
|
\foreach \n in {0, ..., 9} {
|
|
\foreach \i in {1,...,19} {
|
|
\ifthenelse{\i=10}{
|
|
\draw[black]
|
|
({#1 + \lscalefn((\n + (\i / 20))/10)}, #2) --
|
|
({#1 + \lscalefn((\n + (\i / 20))/10)}, #2 + 0.2);
|
|
} {
|
|
\ifthenelse{
|
|
\i=1 \OR \i=3 \OR \i=5 \OR \i=7 \OR
|
|
\i=9 \OR \i=11 \OR \i=13 \OR \i=15 \OR
|
|
\i=17 \OR \i=19
|
|
}{
|
|
\draw[black]
|
|
({#1 + \lscalefn((\n + (\i / 20))/10)}, #2) --
|
|
({#1 + \lscalefn((\n + (\i / 20))/10)}, #2 + 0.1);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \lscalefn((\n + (\i / 20))/10)}, #2) --
|
|
({#1 + \lscalefn((\n + (\i / 20))/10)}, #2 + 0.15);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
\newcommand{\tscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
% First line
|
|
\draw[black] ({#1}, #2) -- ({#1}, #2 + 0.2);
|
|
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks 6 - 10
|
|
\foreach \i in {6,...,9,10,15,...,45}{
|
|
\draw[black]
|
|
({#1 + \tscalefn(\i)}, #2) --
|
|
({#1 + \tscalefn(\i)}, #2 + 0.3)
|
|
node[above] {\i};
|
|
}
|
|
|
|
% Submarks 6 - 10
|
|
\foreach \n in {6, ..., 9} {
|
|
\foreach \i in {1,...,9}{
|
|
\ifthenelse{\i=5}{
|
|
\draw[black]
|
|
({#1 + \tscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \tscalefn(\n + \i / 10)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \tscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \tscalefn(\n + \i / 10)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 15 - 45
|
|
\foreach \n in {10, 15, ..., 40} {
|
|
\foreach \i in {1,...,24}{
|
|
\ifthenelse{
|
|
\i=5 \OR \i=10 \OR \i=15 \OR \i=20
|
|
} {
|
|
\draw[black]
|
|
({#1 + \tscalefn(\n + \i / 5)}, #2) --
|
|
({#1 + \tscalefn(\n + \i / 5)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \tscalefn(\n + \i / 5)}, #2) --
|
|
({#1 + \tscalefn(\n + \i / 5)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
\newcommand{\sscale}[3]{
|
|
\draw[black] ({#1}, #2) -- ({#1 + \sliderulewidth}, #2);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.9);
|
|
\draw[black] ({#1}, #2 + 0.9) -- ({#1}, #2 + 0.7);
|
|
\draw[black] ({#1 + \sliderulewidth}, #2 + 0.9) -- ({#1 + \sliderulewidth}, #2 + 0.7);
|
|
|
|
% First line
|
|
\draw[black] ({#1}, #2) -- ({#1}, #2 + 0.2);
|
|
|
|
|
|
\draw ({#1 - 0.1}, #2 + 0.5) node[left] {#3};
|
|
|
|
% Numbers and marks
|
|
\foreach \i in {6,...,9,10,15,...,30,40,50,...,60,90}{
|
|
\draw[black]
|
|
({#1 + \sscalefn(\i)}, #2) --
|
|
({#1 + \sscalefn(\i)}, #2 + 0.3)
|
|
node[above] {\i};
|
|
}
|
|
|
|
% Submarks 6 - 10
|
|
\foreach \n in {6, ..., 9} {
|
|
\foreach \i in {1,...,9}{
|
|
\ifthenelse{\i=5}{
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \sscalefn(\n + \i / 10)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i / 10)}, #2) --
|
|
({#1 + \sscalefn(\n + \i / 10)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 15 - 30
|
|
\foreach \n in {10, 15, ..., 25} {
|
|
\foreach \i in {1,...,24}{
|
|
\ifthenelse{
|
|
\i=5 \OR \i=10 \OR \i=15 \OR \i=20
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i / 5)}, #2) --
|
|
({#1 + \sscalefn(\n + \i / 5)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i / 5)}, #2) --
|
|
({#1 + \sscalefn(\n + \i / 5)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 30
|
|
\foreach \n in {30} {
|
|
\foreach \i in {1,...,19}{
|
|
\ifthenelse{
|
|
\i=2 \OR \i=4 \OR \i=6 \OR \i=8 \OR
|
|
\i=10 \OR \i=12 \OR \i=14 \OR \i=16 \OR
|
|
\i=18
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i / 2)}, #2) --
|
|
({#1 + \sscalefn(\n + \i / 2)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i / 2)}, #2) --
|
|
({#1 + \sscalefn(\n + \i / 2)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 40 - 50
|
|
\foreach \n in {40, 50} {
|
|
\foreach \i in {1,...,9}{
|
|
\ifthenelse{
|
|
\i=5 \OR \i=10 \OR \i=15 \OR \i=20
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i)}, #2) --
|
|
({#1 + \sscalefn(\n + \i)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(\n + \i)}, #2) --
|
|
({#1 + \sscalefn(\n + \i)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|
|
|
|
% Submarks 60
|
|
\foreach \i in {1,...,10}{
|
|
\ifthenelse{
|
|
\i=5 \OR \i=10
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(60 + \i * 2)}, #2) --
|
|
({#1 + \sscalefn(60 + \i * 2)}, #2 + 0.2);
|
|
} {
|
|
\draw[black]
|
|
({#1 + \sscalefn(60 + \i * 2)}, #2) --
|
|
({#1 + \sscalefn(60 + \i * 2)}, #2 + 0.1);
|
|
}
|
|
}
|
|
}
|