発言者: 飯島 徹
発言日: 2017 10/19 08:20
13399の私のマクロはちょっとおかしな配置になったりしてたので
expl3の勉強も兼ねて作りなおしてみましたw
% emath BBS で続けるには emath 要素が全く無いのでこちらに移りました
expl3に慣れるまで大変そうです(´・ω・`)
\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz,xparse}%
\usetikzlibrary{calc,math}%
\begin{document}
\ExplSyntaxOn
\int_new:N \l_temp_node_number_int
\int_new:N \l_temp_hijosu_int
\int_new:N \l_temp_josu_int
\int_new:N \l_temp_shou_int
\int_new:N \l_temp_seki_int
\int_new:N \l_temp_amari_int
\int_new:N \l_temp_NEXT_int
\NewDocumentCommand \EuclidDiv{mm}{%
\int_zero:N \l_temp_node_number_int
\node(余り-0)[inner~sep=0pt]{#2};
\Original_EuclidDiv:xx {#1}{#2}
}%
\cs_new:Npn \Original_EuclidDiv:xx #1#2{%
% \int_set:Nn で使える int 関数みたいなのがあると思うんだけど見つけられない
% 仕方がなく \tikzmath を用いる...
\tikzmath{%
int~\SHOU;
\SHOU=#1/#2;
}%
\int_set:Nn \l_temp_hijosu_int {#1}
\int_set:Nn \l_temp_josu_int {#2}
\int_set:Nn \l_temp_amari_int {\l_temp_hijosu_int-(\l_temp_josu_int*\SHOU)}
\int_set:Nn \l_temp_shou_int {\SHOU}
\int_set:Nn \l_temp_seki_int {\l_temp_josu_int*\l_temp_shou_int}
\int_set:Nn \l_temp_NEXT_int {\l_temp_node_number_int+1}
\tikzmath{
coordinate~\C;
\C1=(余り-\int_use:N \l_temp_node_number_int.east);
\C2=(余り-\int_use:N \l_temp_node_number_int.west);
\WIDTH=\Cx1-\Cx2;
}%
\node(被除数-\int_use:N \l_temp_NEXT_int)at(余り-\int_use:N \l_temp_node_number_int.east)%
[inner~xsep=0pt,right]{\int_use:N \l_temp_hijosu_int};
\tikzmath{
coordinate~\C;
\C1=(被除数-\int_use:N \l_temp_NEXT_int.east);
\C2=(被除数-\int_use:N \l_temp_NEXT_int.west);
\WIDTH=\Cx1-\Cx2;
}%
\node at($(余り-\int_use:N \l_temp_node_number_int.east)!1/2!(被除数-\int_use:N \l_temp_NEXT_int.west)$){)};
\int_incr:N \l_temp_node_number_int
\node(商-\int_use:N \l_temp_node_number_int)at($(被除数-\int_use:N \l_temp_node_number_int)+(0,1)$)[text~width=\WIDTH-6pt,inner~xsep=0pt,align=right]{\int_use:N \l_temp_shou_int};
\node(積-\int_use:N \l_temp_node_number_int)at($(被除数-\int_use:N \l_temp_node_number_int)+(0,-1)$)[text~width=\WIDTH-6pt,inner~xsep=0pt,align=right]{\int_use:N \l_temp_seki_int};
\node(余り-\int_use:N \l_temp_node_number_int)at($(積-\int_use:N \l_temp_node_number_int)+(0,-1)$)[text~width=\WIDTH-6pt,inner~xsep=0pt,align=right]{\int_use:N \l_temp_amari_int};
\draw(被除数-\int_use:N \l_temp_node_number_int.north~west)--(被除数-\int_use:N \l_temp_node_number_int.north~east);
\draw(余り-\int_use:N \l_temp_node_number_int.north~west)--(余り-\int_use:N \l_temp_node_number_int.north~east);
\unless\ifnum\l_temp_amari_int=0\relax
\Original_EuclidDiv:xx {\l_temp_josu_int}{\l_temp_amari_int}%
\fi
}%
\ExplSyntaxOff
\begin{tikzpicture}[outer xsep=3pt,y={(0,1.2em)},baseline=(余り-0)]
\EuclidDiv{867}{357}
\end{tikzpicture}
\begin{tikzpicture}[outer xsep=3pt,y={(0,1.2em)},baseline=(余り-0)]
\EuclidDiv{197}{92}
\end{tikzpicture}
\begin{tikzpicture}[outer xsep=3pt,y={(0,1.2em)},baseline=(余り-0)]
\EuclidDiv{12345}{32}
\end{tikzpicture}
\end{document}
▼関連発言
│
└◆1432:13396:ユークリッドの互除法における割り算の続き [飯島 徹] 10/19 08:20
├◆1433:Re:13396:ユークリッドの互除法における割り算の続き [飯島 徹] 10/19 08:24
└◆1434:Re:13396:ユークリッドの互除法における割り算の続き [田中徹] 10/19 22:59
└◆1435:Re[2]:13396:ユークリッドの互除法における割り算の続き [飯島 徹] 10/20 05:55
└◆1436:Re[3]:13396:ユークリッドの互除法における割り算の続き [飯島 徹] 10/20 07:25<-last