#!/usr/bin/env perl $c = # # slide rule generating script # only C and D scales # "Daisuke TOMINAGA, November 16, 2012"; # tominaga-daisuke@aist.go.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 16, 2010 # Initial release $L = 210.5; # 尺の全長, mm $h1 = 2; # 小さい目盛りの高さ $h15= 3; # 1 から 2 の間の補助 $h2 = 4; # 中くらいの目盛りの高さ $h3 = 5; # 高い目盛りの高さ $h4 = 7; # 高い目盛りの高さ $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 尺共通の横線の高さ print " \\put(3, 102){C}\n"; print " \\put(3, 66){D}\n"; print " \\put(0,$LB){\\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 尺 # 数字出力 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 尺 } 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 尺 } } 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 尺 } } } $x = $P * $L; print "\\color{red}\n"; print "\\put($x, $LB){\\line(0, 1){$h4}}\n"; # π の目盛り on C print "\\put($x, $LB){\\line(0,-1){$h4}}\n"; # π の目盛り on D $xp = $x - 1; $hh = $LB + $h4*1.1; print "{\\put($xp, $hh){\$\\pi\$}}\n"; # on C $hh = $LB - $h4*1.25; print "{\\put($xp, $hh){\$\\pi\$}}\n"; # on D print "\\color{black}\n"; print " {\\small\\put(2,60){Handmade cylindrical slide rule, $c}}\n"; print " \\end{picture}\n"; print "}\n"; print "\\end{document}\n";