![如何使用 xlop 在法语除法算法中放置进位数字?](https://linux22.com/image/367296/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20xlop%20%E5%9C%A8%E6%B3%95%E8%AF%AD%E9%99%A4%E6%B3%95%E7%AE%97%E6%B3%95%E4%B8%AD%E6%94%BE%E7%BD%AE%E8%BF%9B%E4%BD%8D%E6%95%B0%E5%AD%97%EF%BC%9F.png)
20 世纪 60 年代,法国小学教授了除法算法。这是一种可以快速执行所有除法的算法。在此算法中,进位数字放在数字前面,这样就不必进行减法。法国算法的解释如下(法语):
例如,在 11945 除以 47 时,第一步是乘以 2×7 = 14,这个结果必须在 9 处删除。这是不可能的;你必须在 9 前面放 1,然后删除 14 到 19。也就是 5。进位数 1 必须添加到下一次乘法的结果中。
一位 MWE 表示:
\documentclass{article}
\usepackage{xlop}
\begin{document}
\opidiv{11945}{47}
\end{document}
如何用xlop将这个进位的数字放在数字前面?
使用 www.DeepL.com/Translator 翻译
答案1
这是一个使用TiKz
允许的数字风格化的解决方案,xlop
operandstyle
remainderstyle
。为此,我已将给出的解决方案调整为以下问题:在 xlop 包中围绕数字绘制一个圆圈
使用 时xlop
,当通过宏应用数字样式时,最后一个参数(要样式化的数字)由 xlop 本身提供给该宏。
因此,该宏声明有 2 个参数,但只有第一个参数提供给其调用,xlop 本身提供最后一个参数。
我创建了两个宏:
第一个调用的宏
\chiffre
用 TiKz 创建一个节点,它有两个参数:第一个是它的名称,第二个是用于对其进行风格化的数字;第二个宏调用
\retenue
将进位的数字放在数字的左下角(正如我自己学会做的),它的第一个参数是数字的名称,它的第二个参数是进位的数字。
代码如下:
\documentclass{article}
\usepackage{xlop}
\usepackage{tikz}
\newcommand{\chiffre}[2]{\tikz[remember picture] \node[inner sep=0pt](#1){#2};}
\newcommand{\retenue}[2]{\tikz[remember picture,overlay]
\node[inner sep=0pt,
outer sep=2pt,
anchor=north east,
font=\tiny]at(#1){#2} ;}
\begin{document}
\opidiv[dividendbridge,
operandstyle.1.3=\chiffre{a},
remainderstyle.1.1=\chiffre{b},
remainderstyle.2.1=\chiffre{c}]{11945}{47}
\retenue{a}{1}
\retenue{b}{4}
\retenue{c}{3}
\end{document}
输出:
使用 www.DeepL.com/Translator 翻译
答案2
我没有找到解决方案xlop
,但是,由于还没有人回答,所以这是一个手动解决方法tikzmark
:
\documentclass{article}
\usepackage{xlop}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\tikzmark{mydiv}\opidiv[dividendbridge, columnwidth=1.1em]{11945}{47}
\begin{tikzpicture}[overlay,remember picture]
\node[font=\tiny, shift={(2.3em,8.75ex)}] at (pic cs:mydiv)
{1};
\node[draw=red, shift={(2.6em,9ex)}, circle, thick, text width=6pt] at (pic cs:mydiv)
{};
\end{tikzpicture}
\end{document}