最近Tikzの練習をしています.
TeXのマクロなどを書いたことがないので,悪戦苦闘中です.
今回は電圧計の目盛りを作図してみました.
\documentclass[10pt]{article}
\usepackage[dvipdfmx]{graphicx}
\PassOptionsToPackage{svgnames}{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (0,0)--(3,0)-- ++(70:2.5)-- ++(-3,0)--cycle; %外枠
\coordinate (p) at ($(1.5,0)+(70:0.7)$);
\draw[thick] (p)--($(p)+(0,1)$);
\node (V) at ($(p)+(70:0.3)$){\scriptsize $\underline{\mathrm{V}}$};
\fill ($(p)+(-0.17,0)$) -- ($(p)+(0.17,0)$) -- ($(p)+(0,0.13)$)--cycle;
\coordinate (q) at ($(70:0.4)+(0.65,0)$);
\begin{scope}[shift=(q),scale=1.2]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 電圧計の目盛り
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand*{\r}{0.7}%円の半径
\renewcommand*{\l}{0.3}%長い目盛りの長さ
\renewcommand*{\t}{0.15}%短い目盛りの長さ
\pgfmathparse{cos(70)}
\let\c\pgfmathresult
\pgfmathparse{sin(70)}
\let\d\pgfmathresult
\pgftransformcm{1}{0}{\c}{\d}{}%座標軸の回転とシフト
%x軸とy軸の成す角が70度の斜交座標系に座標系を変更する
\foreach \i in {0,1,2,..., 20}
{
\pgfmathparse{30+6*\i}
\let\th\pgfmathresult
% 変数\iが5の倍数のときのみ長い目盛りを使う.
\pgfmathparse{int(mod(\i,5))}
\let\imod\pgfmathresult
\ifnum\imod=0
\pgfmathparse{\r+\l}
\let\length\pgfmathresult
\draw[thin] (\th:\r)--(\th:\length);
\else
\pgfmathparse{\r+\t}
\let\length\pgfmathresult
\draw[thin] (\th:\r)--(\th:\length);
\fi
}
\end{scope}
\end{tikzpicture}
\end{document}
使い回しをしない変数をあまり多く定義したくないのですが,座標に直接\pgfmathparseを使って記述したりするとエラーが頻出するので,エラーを避けつつようやく望みの出力に漕ぎ着けたような状況です.電圧計の目盛りはscope環境で括って,後でshiftさせているのですが望みの位置に出力されず,微調整をしているのが気になるところです.
変数を\renewcommandや\letで定義していますが,何を使うのが推奨されるのか,また再定義してしまうとtikzpicture環境外で問題が生じないのかが気になっています.