#!/usr/bin/env perl $c = # # slide rule generating script # "Daisuke TOMINAGA, November 16, 2012"; # tominaga@cbrc.jp # # How to use: # just run with perl. latex source script will be written into STDOUT. # # License: # Anybody can use and distribute this script under GNU General Public License # (GPL) version 3. If you want some another license, please contact me. # GPL v3 - http://www.gnu.org/licenses/gpl.html # # History # November 16, 2012 # Change Length of the scale; 219mm -> 210.5mm # due to size (diameter) change of the CHIPSTAR container. # July 12, 2010 # Initial release $L = 210.5; # 尺の全長, mm $h1 = 5; # 小さい目盛りの高さ $h15= 6; # 1 から 2 の間の補助 $h2 = 8; # 中くらいの目盛りの高さ $h3 = 10; # 高い目盛りの高さ $h4 = 12; # 高い目盛りの高さ $k = 0; for ($j = 1; $j < 2; $j += 0.01) { $tic[$k] = log($j)/log(10); $m[$k++] = $j } for ($j = 2; $j < 4; $j += 0.02) { $tic[$k] = log($j)/log(10); $m[$k++] = $j } for ($j = 4; $j <= 10.04; $j += 0.05) { $tic[$k] = log($j)/log(10); $m[$k++] = $j } $tic[0] = 0; $P = log(3.14159265358979323846264338327950288)/log(10); $N = @tic; print "\\documentclass[landscape]{article}\n"; print "\\usepackage{graphicx,color}\n"; print "\\pagestyle{empty}\n"; print "\\setlength{\\oddsidemargin}{0mm}\n"; print "\\newcommand{\\putc}[1]{\\setbox0=\\hbox{#1}\\kern-.5\\wd0{#1}}\n"; print "\\begin{document}\n"; print "{\\setlength{\\unitlength}{1truemm}\n"; print " \\begin{picture}(220,100)\n"; $LB = 85; # picture 環境中でのC, D 尺共通の横線の高さ $LB2 = 52;# DI 尺と下の C 尺の線 print " \\put(3, 102){C}\n"; print " \\put(3, 70){D}\n"; print " {\\color{red}\\put(3, 65){DI}}\n"; print " \\put(3, 33){C}\n"; print " \\put(0,$LB){\\line(1,0){$L}}\n"; print " \\put(0,$LB2){\\line(1,0){$L}}\n"; for ($i = 0; $i < @tic; $i++) { # 目盛り出力 $x = $tic[$i] * $L; if (abs(int($m[$i] +0.5) - $m[$i]) < 0.001) { $h = $h4 } elsif (abs(int($m[$i]*2 +0.5) - ($m[$i] * 2)) < 0.001) { $h = $h3 } elsif (abs(int($m[$i]*10+0.5) - ($m[$i] * 10)) < 0.001) { $h = $h2 } elsif (abs(int($m[$i]*20+0.5) - ($m[$i] * 20)) < 0.001) { $h = $h15 } else { $h = $h1 } print "\\put($x, $LB){\\line(0, 1){$h}}\n"; # C 尺 print "\\put($x, $LB){\\line(0,-1){$h}}\n"; # D 尺 $xi = $L - $x; if ($xi < 0) { $xi = 0 } print "\\put($xi, $LB2){\\line(0, 1){$h}}\n"; # DI 尺 print "\\put($x, $LB2){\\line(0,-1){$h}}\n"; # 下のC 尺 # 数字出力 if (abs(int($m[$i]+0.5) - $m[$i]) < 0.001) { # 整数きざみ if (int($m[$i]+0.5) == 1) { $n = int($m[$i]+0.5); $xp = $x + 1; $xip = $xi - 1; $hh = $LB + $h4*1.1; print "\\put($xp, $hh){\\putc{$n}}\n"; # C 尺 $hh = $LB - $h4*1.1 - 2; print "\\put($xp, $hh){\\putc{$n}}\n"; # D 尺 $hh = $LB2 + $h4*1.1; print "{\\color{red}\\put($xip, $hh){\\putc{$n}}}\n"; # DI 尺 $hh = $LB2 - $h4*1.1 - 2; print "\\put($xp, $hh){\\putc{$n}}\n"; # 下のC 尺 } elsif (int($m[$i]+0.5) != 10) { $n = int($m[$i]+0.5); $hh = $LB + $h4*1.1; print "\\put($x, $hh){\\putc{$n}}\n"; # C 尺 $hh = $LB - $h4*1.1 - 2; print "\\put($x, $hh){\\putc{$n}}\n"; # D 尺 $hh = $LB2 + $h4*1.1; print "{\\color{red}\\put($xi, $hh){\\putc{$n}}}\n"; # DI 尺 $hh = $LB2 - $h4*1.1 - 2; print "\\put($x, $hh){\\putc{$n}}\n"; # 下のC 尺 } } elsif (abs(int($m[$i]*2+0.5) - ($m[$i] * 2)) < 0.001) { # 0.5 刻み if (int($m[$i]*2+0.5) < 5*2) { $n = (int($m[$i]*2+0.5))/2; $hh = $LB + $h3*1.1; print "\\put($x, $hh){\\putc{$n}}\n"; # C 尺 $hh = $LB - $h3*1.1 - 2; print "\\put($x, $hh){\\putc{$n}}\n"; # D 尺 $hh = $LB2 + $h3*1.1; print "{\\color{red}\\put($xi, $hh){\\putc{$n}}}\n"; # DI 尺 $hh = $LB2 - $h3*1.1 - 2; print "\\put($x, $hh){\\putc{$n}}\n"; # 下のC 尺 } } } $x = $P * $L; $xi = $L - ($P * $L); print "\\put($x, $LB){\\line(0, 1){$h4}}\n"; # π の目盛り on C print "\\put($x, $LB){\\line(0,-1){$h4}}\n"; # π の目盛り on D print "\\put($xi, $LB2){\\line(0,1){$h4}}\n"; # π の目盛り on DI print "\\put($x, $LB2){\\line(0, -1){$h4}}\n"; # π の目盛り on C $xp = $x - 1; $xip = $xi - 1; $hh = $LB + $h4*1.1; print "{\\color{red}\\put($xp, $hh){\$\\pi\$}}\n"; # on C $hh = $LB - $h4*1.25; $xp = $x - 2; print "{\\color{red}\\put($xp, $hh){\$\\pi\$}}\n"; # on D $hh = $LB2 + $h4*1.1; $xip = $xi - 4; print "{\\color{red}\\put($xip, $hh){\$\\pi\$}}\n"; # on DI $hh = $LB2 - $h4*1.25; $xp = $x - 4.5; print "{\\color{red}\\put($xp, $hh){\$\\pi\$}}\n"; # on C-low print " {\\small\\put(95,30){Handmade cylindrical slide rule, $c}}\n"; print " \\end{picture}\n"; print "}\n"; print "\\end{document}\n";