我正在输入初等算术,有谁知道如何输入吗?
我知道也许有一个包“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