ifnumと四則演算の計算速度

名前: 野村
日時: 2007-08-02 18:21:56
IPアドレス: 150.84.51.*

pgfパッケージ中に正12面体カレンダーがあったので,それを普段見慣れている カレンダーの体裁にしてみました. そこで,どうでもよさそうな下記の疑問が生じました. ifnum と 四則演算 とで速度の違いやコーディングなどの点で注意すべき点 などはどういったものがあるのだろうか. \pgfcalendarcurrentweekday には 0から 6の数字が入っており,単に mod(\pgfcalendarcurrentweekday+1,7) を計算したいだけなのですが 以下のような ifnum と四則演算で何か違いがあるのかな,と疑問に思った次第です. \ifnum\c@pgf@counta>6\relax\advance\c@pgf@counta by-7\relax\fi% \divide\c@pgf@counta by7\relax% \multiply\c@pgf@counta by-7\relax% \advance\c@pgf@counta by\pgfcalendarcurrentweekday\relax% \advance\c@pgf@counta by1\relax% pgfパッケージ中の /pgf/doc/generic/pgf/version-for-pdftex/en/pgfmanual.pdf の 202〜203ページにある正12面体カレンダーが大元です. # 印字の範囲を設定していませんので,Overfull が出ると思います. \documentclass{article} \usepackage{tikz} \usetikzlibrary{calendar} \usetikzlibrary{folding} \pagestyle{empty} \makeatletter %%% pgflibrarytikzcalendar.code.tex %%% $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/pgflibrarytikzcalendar.code.tex,v 1.12 2007/03/09 17:49:32 tantau Exp $ \tikzstyle{week list}=[% execute before day scope={% \ifdate{day of month=1}{\ifdate{equals=\pgfcalendarbeginiso}{} {% % On first of month, except when first date in calendar. \pgfmathsetlength{\pgf@y}{\tikz@lib@cal@month@yshift}% \pgftransformyshift{-\pgf@y} }% }{}% }, execute at begin day scope={% \pgfmathsetlength\pgf@x{\tikz@lib@cal@xshift}% %%% 変更ここから ---> \c@pgf@counta=\pgfcalendarcurrentweekday% \advance\c@pgf@counta by1\relax% \ifnum\c@pgf@counta>6\relax\advance\c@pgf@counta by-7\relax\fi% \pgf@x=\the\c@pgf@counta\pgf@x% %%% \pgf@x=\pgfcalendarcurrentweekday\pgf@x% %%% 変更ここまで <--- \pgftransformxshift{\pgf@x}% }, execute after day scope={% \ifdate{Saturday}{%%% <--- 変更 \pgfmathsetlength{\pgf@y}{\tikz@lib@cal@yshift}% \pgftransformyshift{-\pgf@y} }{}% }, tikz@lib@cal@width=7 ] \makeatother \begin{document} \sffamily\scriptsize \begin{tikzpicture}[transform shape] \tikzstyle{every calendar}=[ at={(-9ex,6ex)}, week list, month label above centered, month text=\bfseries\textcolor{red}{\%mt} \%y0, if={(Saturday) [blue]},%%% <--- 土曜は青 if={(Sunday) [red]},%%% <--- 日曜は赤 rotate=180%%% <--- 五角形の頂点を下にして一ヶ月分を表示 ] \tikzstyle{every fold}=[dotted] \tikzfoldingdodecahedron[ folding line length=2.5cm, face 1={ \calendar [dates=\the\year-01-01 to \the\year-01-last];}, face 2={ \calendar [dates=\the\year-02-01 to \the\year-02-last];}, face 3={ \calendar [dates=\the\year-03-01 to \the\year-03-last];}, face 4={ \calendar [dates=\the\year-04-01 to \the\year-04-last];}, face 5={ \calendar [dates=\the\year-05-01 to \the\year-05-last];}, face 6={ \calendar [dates=\the\year-06-01 to \the\year-06-last];}, face 7={ \calendar [dates=\the\year-07-01 to \the\year-07-last];}, face 8={ \calendar [dates=\the\year-08-01 to \the\year-08-last];}, face 9={ \calendar [dates=\the\year-09-01 to \the\year-09-last];}, face 10={\calendar [dates=\the\year-10-01 to \the\year-10-last];}, face 11={\calendar [dates=\the\year-11-01 to \the\year-11-last];}, face 12={\calendar [dates=\the\year-12-01 to \the\year-12-last];} ]; \end{tikzpicture} \end{document}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)