如何输入短除法?

如何输入短除法?

我正在输入初等算术,有谁知道如何输入吗?

在此处输入图片描述

我知道也许有一个包“polynom”可以解决这个问题,但是有没有什么方法可以在不调用外部包的情况下工作?

谢谢。

答案1

不去深入解释,但这只使用 Plain TeX 宏。;-)

\documentclass{article}

\makeatletter

\newcommand{\shortdiv}[1]{%
  \vcenter{\offinterlineskip\m@th
    \setbox\z@=\hbox{$\big|$}%
    \def\short@div@strut{\vrule width0pt height\ht\z@ depth\dp\z@}%
    \dimen@=-.5em
    \short@div#1;\short@div;
  }%
}

\def\short@div#1;{%
  \ifx\short@div#1%
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {\short@@div#1,\@nil}%
}

\def\short@@div#1,#2\@nil{%
  \advance\dimen@ .5em
  \if\relax\detokenize{#2}\relax
    % last step
    \hbox{\kern\dimen@$\short@div@strut#1$}%
    \expandafter\@gobble
  \else
    \short@@@div#1,#2%
    \expandafter\@firstofone
  \fi
  \short@div
}
\def\short@@@div#1,#2,{%
  \hbox{\kern\dimen@$\short@div@strut#1\,$\short@@@@div{#2}}%
}
\def\short@@@@div#1{%
  \setbox\z@=\hbox{$\,\short@div@strut#1$}%
  \dimen@=1em \ifdim\wd\z@>1em \dimen@=\wd\z@ \advance\dimen@ .5em \fi
  \vrule\kern-0.4pt\vtop{\hbox to \dimen@{$\,\short@div@strut#1$\hss}\hrule}%
}
\makeatother

\begin{document}
\[
\shortdiv{2,a;2,b;2,c;3,d;3,e;5,33333;5,g;7}
\]
\end{document}

在此处输入图片描述

答案2

调整我的答案侧面显示除法和余数。编辑以使其适用于带有下降器的参数,并延长水平规则的长度,并针对参数使用数学模式,并在数学模式下进行箱体测量,并将 strutheight 延长到上面的线。

再次编辑以自动缩进。每次调用后缩进都会重置为 0pt,\remainder{}或者通过将可选参数传递[0]给第一次调用\mydiv(可选参数是缩进级别)交替重置。

已编辑以删除使用包的版本。

在这里,我采用了\stackengine宏,并通过将所有参数硬连线以适应当前问题来将其压缩。因此,我称之为\dumbstackengine

\documentclass{article}
\newcounter{divline}
\def\rlwd{.5pt} \def\rlht{\dimexpr\dp\strutbox+\ht\strutbox} \def\rldp{.75ex}
\newcommand\mydiv[3][\relax]{%
  \ifx\relax#1\stepcounter{divline}\else\setcounter{divline}{#1}\fi%
  \mbox{}\hspace{\thedivline\dimexpr1ex}#2~\setbox0=\hbox{~$#3$}%
  \dumbstackengine{-\rlwd}{\rule[-\rldp]{\rlwd}{\rlht}~#3}{\rule{\dimexpr4pt+\wd0}{\rlwd}}%
}
\def\remainder#1{\stepcounter{divline}%
  \mbox{}\hspace{\dimexpr1ex+\thedivline\dimexpr1ex}~#1\setcounter{divline}{0}}
\makeatletter
\global\newlength\@stackedboxwidth
\newlength\@boxshift
\newsavebox\@addedbox
\newsavebox\@anchorbox
\newcommand*\dumbstackengine[3]{%
    \sbox{\@anchorbox}{$#2$}%
    \sbox{\@addedbox}{$#3$}%
    \setlength{\@stackedboxwidth}{\wd\@anchorbox}%
      \ifdim\wd\@addedbox>\@stackedboxwidth%
        \setlength{\@stackedboxwidth}{\wd\@addedbox}%
      \fi%
        \setlength{\@boxshift}{\dimexpr-\dp\@anchorbox -\ht\@addedbox -#1}%
        \usebox{\@anchorbox}%
        \hspace{-\wd\@anchorbox}%
        \raisebox{\@boxshift}{\usebox{\@addedbox}}%
        \hspace{-\wd\@addedbox}%
        \hspace{\@stackedboxwidth}%
}
\makeatother
\begin{document}
\noindent%
\mydiv{2}{a} \\
\mydiv{2}{b} \\
\mydiv{2}{c} \\
\mydiv{3}{d} \\
\mydiv{3}{e} \\
\mydiv{5}{34689} \\
\mydiv{5}{g} \\
\remainder{7}            
\end{document}

在此处输入图片描述

答案3

根据您的确切间距需求,以下一些变化可能会起作用。

\parindent=0pt
\newbox\leftbox
\newbox\rightbox
\newbox\skipbox
\def\div#1#2{\hskip\wd\skipbox\setbox\skipbox\hbox{\unhcopy\skipbox#1}
\setbox\leftbox\hbox{#1}\unhcopy\leftbox\vrule height 2ex depth 1pt width .5pt
\setbox\rightbox\hbox{#2}\vrule height-.5pt depth1pt width\wd\rightbox\hskip-\wd\rightbox\unhcopy\rightbox\par}
\div{2}{a}
\div{3}{b}
\div{123}{abcd}
\bye

相关内容