emath saloon

新規発言一覧最新記事過去一覧検索HOME

No.1432  13396:ユークリッドの互除法における割り算の続き
発言者: 飯島 徹
発言日: 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

  返信フォーム [引用]
名 前 保存
題 名
メール省略可
★この板では,投稿者が改行を入れない限り
 延々と右に続きます。適宜,改行を入れてください。
発 言
URL 省略可
PASSWORD
書き込む

Pass 保存


CGIROOM