非現実的なTeXの使い方




割り算

\documentclass{article}
\begin{document}

\makeatletter

\newcount\x
\newcount\y
\newcount\c@K
\c@K=1
\newcommand{\N}{1018}

% #1/#2->#3
\def\division#1#2#3{%
%
\x=#1 \divide\x by #2 %               \x:=商
\edef\r{\the\x.}%                     \r:=整数部分と小数点
\y=\x \multiply\y by #2
\x=#1 \advance\x by -\y %             \x:=余り
\multiply\x by 10 \edef\s{\the\x}%    \s:=新しい被除数
\divide\x by #2 \edef\r{\r\the\x}%    \r:=小数点以下第1位まで
%
\@whilenum\value{K}<\N\do{
\y=\x \multiply\y by #2
\x=\s \advance\x by -\y %             \x:=新しい余り
\multiply\x by 10 \edef\s{\the\x}%    \s:=新しい被除数
\divide\x by #2 \edef\r{\r\the\x}%    \r:=小数点以下第1位まで
\stepcounter{K}}
%
\edef#3{\r}}
 
\makeatother

\division{1}{1019}\R \typeout{1/1019=\R}

\end{document}

状態遷移図

\documentclass{article}
\usepackage{epic,eepic,eclarith}
\begin{document}

\makeatletter

\def\@vector@dif(#1,#2)(#3,#4)(#5,#6){%
  \Sub{#1}{#3}{#5}\Sub{#2}{#4}{#6}}
\def\@vector@sum(#1,#2)(#3,#4)(#5,#6){%
  \Add{#1}{#3}{#5}\Add{#2}{#4}{#6}}
\def\@scalar@multiplication#1(#2,#3)(#4,#5){%
  \Mul{#1}{#2}{#4}\Mul{#1}{#3}{#5}}
\def\vector@dif#1#2#3{%
  \let\@@x@dif=\relax
  \let\@@y@dif=\relax
  \edef\@@parameter@dif{#1#2(\@@x@dif,\@@y@dif)}%
  \expandafter\@vector@dif\@@parameter@dif
  \edef#3{(\@@x@dif,\@@y@dif)}}
\def\vector@sum#1#2#3{%
  \let\@@x@sum=\relax
  \let\@@y@sum=\relax
  \edef\@@parameter@sum{#1#2(\@@x@sum,\@@y@sum)}%
  \expandafter\@vector@sum\@@parameter@sum
  \edef#3{(\@@x@sum,\@@y@sum)}}
\def\unit@vector#1#2{%
  \let\@@x@unit=\relax
  \let\@@y@unit=\relax
  \edef\@@parameter@unit{#1(\@@x@unit,\@@y@unit)}%
  \expandafter\Unit\@@parameter@unit
  \edef#2{(\@@x@unit,\@@y@unit)}}
\def\scalar@multiplication#1#2#3{% #1:scalar #2,#3:vector
  \let\@@x@scalar=\relax
  \let\@@y@scalar=\relax
  \edef\@@parameter@scalar{#1#2(\@@x@scalar,\@@y@scalar)}%
  \expandafter\@scalar@multiplication\@@parameter@scalar
  \edef#3{(\@@x@scalar,\@@y@scalar)}}
\def\CircleRadius#1{\@killglue
  \def\@CircleRadius{#1}%
  \Mul\@CircleRadius{2}\@CircleDiameter
  \ignorespaces}
\def\CircleNode(#1,#2)#3#4{\@killglue
  \node(#1,#2){#3}{#4}%
  \put(#1,#2){\circle{\@CircleDiameter}}%
  \ignorespaces}
\def\CircleNodeEdge(#1,#2){\@killglue
  \edef\center@of@first@circle{\@nameuse{N?#1}}%
  \edef\center@of@last@circle{\@nameuse{N?#2}}%
    \vector@dif\center@of@last@circle\center@of@first@circle\center@dif
    \unit@vector\center@dif\unit@dif
    \scalar@multiplication\@CircleRadius\unit@dif\circumference@dif
    \vector@sum\center@of@first@circle\circumference@dif\edge@first
    \vector@dif\center@of@last@circle\circumference@dif\edge@last
  \edef\edge@first@to@last{\edge@first\edge@last}%
  \expandafter\edge@brush\edge@first@to@last
  \ignorespaces}

\makeatother

\unitlength=.6cm
\def\ArrowHeadSize{0.3}%
\begin{picture}(10,6)
\throughbrush{\arrow\drawline}
\CircleRadius{0.5}
\CircleNode(1,1){S0}{\makebox(0,0){$S_0$}}
\CircleNode(9,1){S1}{\makebox(0,0){$S_1$}}
\CircleNode(9,5){S2}{\makebox(0,0){$S_2$}}
\CircleNode(1,5){S3}{\makebox(0,0){$S_3$}}
\CircleNodeEdge(S0,S1)
\CircleNodeEdge(S0,S2)
\CircleNodeEdge(S1,S2)
\CircleNodeEdge(S2,S3)
\CircleNodeEdge(S3,S1)
\end{picture}

\end{document}

3Dグラフ

\documentclass{article}
\usepackage{epic,eepic,eclarith}
%\usepackage{}
\begin{document}

\makeatletter
%
\edef\orig@colon{\the\catcode`\!}
\catcode`\!=11
%
\def\f@nc{%
\def\@stock{}
\newdimen\@cnt\@cnt=-10pt
\loop
\ifdim \@cnt<10pt
\!Eval\@cnt\@cnt@x
\Mul{\@cnt@x}{\@cnt@x}{\@cnt@y}
\ifdim\@cnt@y\p@<5pt
\ifdim\@cnt@y\p@>-5pt
\edef\@stock{\@stock(\@cnt@x ,\@cnt@y)}
\else \relax \fi \fi
\advance\@cnt by 0.05pt
\repeat
\put(0,0){\expandafter\path\@stock}}
%
\def\func{\unitlength=10pt%
\begin{picture}(20,20)(-10,-10)
\newdimen\cnt\cnt=-10pt
\loop
\ifdim \cnt<10pt
\!Eval\cnt\cnt@x
\Mul{\cnt@x}{\cnt@x}{\cnt@y}
\ifdim\cnt@y\p@<5pt
\ifdim\cnt@y\p@>-5pt
\put(\cnt@x ,\cnt@y){\f@nc}
\else \relax \fi \fi
\advance\cnt by .2pt
\repeat
\end{picture}}
%
\catcode`\!=\orig@colon
%
\makeatother

\func

\end{document}



タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年08月30日 23:06