[Tex/LaTex] How to show the full remainder in polynomial long division

polynom

Original

The remainder provided by polynom.sty is NOT complete (as shown in the following figure).

alt text


My Objective

When I was in senior high school, my teacher made the diagram like below. 🙂

Thus the final step must show the TOTAL remainder and mark it with L-shaped curve.

NOTE

I am sorry. The previous post I forgot to put back -1/4 in the original position. It have made you confused. Now there is no mistake anymore. 🙂

alt text


Minimal Code

\documentclass{article}
\usepackage{polynom,array}
\usepackage[table]{xcolor}


\makeatletter
\def\pld@ArrangeResult#1{%
    \ifx\pld@remainder\@empty
        \@tempcnta\pld@maxcol\relax
        \pld@InsertItems@do\pld@lastline
            {\pld@firsttrue\pld@PLD{\pld@R{0}{1}}}%
    \fi
    \ifnum\pld@currstage>\z@
        \pld@Extend\pld@allines{\pld@lastline\cr}%
    \else
        \pld@InsertFake\pld@lastline
    \fi
    \pld@iftopresult
        \def\pld@lastline{\pld@PrintPoly\pld@divisor%
        %====================================================================================
        \quad\smash{{\color{red}\rule[-6pt]{\arrayrulewidth}{17pt}}}\kern-\arrayrulewidth&}%
        %====================================================================================
    \else
        \let\pld@lastline\@empty
        \ifx B\pld@style\else
            \def\pld@lastline{\pld@leftdelim\strut\pld@rightxdelim&}%
        \fi
    \fi
    \expandafter\pld@AR@col\expandafter\pld@PLD
                           \expandafter\pld@lastline#1+\relax+%
    \pld@SplitQuotient
    \pld@iftopresult
        \let\pld@currentline\@empty
        \expandafter\pld@AR@col\expandafter\pld@PLD
                               \expandafter\pld@currentline
                                           \pld@quotient+\relax+%
        \expandafter\pld@AR@col\expandafter\pld@XPLD
                               \expandafter\pld@currentline
                                           \pld@shadow+\relax+%
        \edef\pld@subline{%
            \noexpand\cline{\tw@-\pld@maxcol}%
            \noalign{\vskip\jot}}%
        \pld@Extend\pld@currentline{\expandafter\cr\pld@subline}%
    \else
        \@tempcnta-\@tempcnta
        \advance\@tempcnta\pld@maxcol\relax \advance\@tempcnta\@ne
        \edef\pld@span{\the\@tempcnta}%
        \ifx B\pld@style
          \pld@AddTo\pld@lastline{%
            &\multispan\pld@span${}=%
            \pld@PrintPolyWithDelims\pld@divisor
            \expandafter\pld@IfSum\expandafter{\pld@divisor}{}{\cdot}%
            \expandafter\pld@IfSum\expandafter{\pld@quotient}\pld@true
                                                             \pld@false
            \pld@if \pld@leftdelim
                    \pld@PrintPolyShadow
                    \pld@rightdelim
              \else \pld@PrintPolyShadow \fi
            \pld@firstfalse
            \expandafter\pld@PrintRemain\expandafter{\pld@remainder}$}%
        \else
          \pld@AddTo\pld@lastline{%
            &\multispan\pld@span$\pld@leftxdelim\strut\pld@rightdelim
            \pld@div
            \pld@PrintPolyWithDelims\pld@divisor=
            \pld@PrintPolyShadow
            \ifx\pld@remainder\@empty\else
                +{}%
                \setbox\z@=\hbox{$\displaystyle
                  \frac{\let\strut\@empty\pld@firsttrue \expandafter
                        \pld@PrintRemain\expandafter{\pld@remainder}}%
                       {\let\strut\@empty\pld@PrintPoly\pld@divisor}$}%
                \dp\z@=\z@\box\z@
            \fi
            $}%
        \fi
    \fi
\expandafter\pld@AR@\pld@allines\relax}
\makeatother


\arrayrulecolor{red}
\arrayrulewidth=0.8pt
\def\strut{\rule[-6pt]{0pt}{12pt}}

\begin{document}
\polylongdiv[style=A]{\frac{3}{7}x^9+x^2-\frac{1}{4}}{\frac{9}{5}x^4-1}

\vspace{1cm}
\polylongdiv[style=A]{x^4-1}{x^2-1}
\end{document}

Best Answer

The following code should work; I've included a few test cases. To keep the code shorter, I didn't include your changes to the style of the output (red color, and bar between dividend and divisor instead of parenthesis). My changes and additions to polynom are marked with !!!.

\documentclass{article}
\usepackage{polynom,array}

\makeatletter
\def\pld@DivPoly@l{%
    \ifx\pld@remainder\@empty\else
        \pld@IfNeedsDivision\pld@remainder\pld@divisor
        {\pld@ExtendPoly\pld@quotient\pld@factor
         \pld@NMultiplyPoly\pld@sub\pld@divisor\pld@factor
         \pld@SubtractPoly\pld@remainder\pld@sub
         \expandafter\pld@DivPoly@l}%
        {\expandafter\pld@insert@remainder                       % !!!
         \pld@last@remainder+\relax\relax}                       % !!!
    \fi}
\def\pld@insert@remainder#1+#2\relax{%                           % !!!
    \ifx\relax#1\relax\else\pld@InsertItems\@empty\@empty{#1}\fi % !!!
    \ifx\relax#2\relax\else\pld@insert@remainder#2\relax\fi}     % !!!
\def\pld@SubtractPoly@l#1+#2\@empty#3+#4\@empty{%
    \ifx\relax#1\relax
        \let\pld@last@remainder\@empty                           % !!!
        \ifx\relax#3\relax \let\pld@next\@empty \else
          \pld@AddToPoly\pld@tempoly{#3}%
          \pld@if \pld@InsertItems{#3}{#3}{}\fi
          \def\pld@next{\pld@SubtractPoly@l\relax+\@empty#4\@empty}%
        \fi
    \else
    \ifx\relax#3\relax
        \pld@SubtractPoly@r#1+#2\@empty
        \let\pld@next\@empty
    \else
        \pld@IfMonomE{#1}{#3}%
        {\def\pld@temp{#1+#3}%
         \pld@CondenseMonomials\pld@true\pld@temp
         \ifx\pld@temp\@empty\else
             \pld@ExtendPoly\pld@tempoly\pld@temp
         \fi
         \pld@if \expandafter\pld@InsertItems\expandafter
                 {\pld@temp}{#3}{#1}\fi
         \def\pld@next{\pld@SubtractPoly@l#2\@empty#4\@empty}}%
        {\pld@IfMonomL{#1}{#3}%
         {\pld@AddToPoly\pld@tempoly{#3}%
          \pld@if \pld@InsertItems{#3}{#3}{}\fi
          \def\pld@next{\pld@SubtractPoly@l#1+#2\@empty#4\@empty}}%
         {\pld@AddToPoly\pld@tempoly{#1}%
          \pld@if \pld@InsertItems{#1}{}{#1}\fi
          \def\pld@next{\pld@SubtractPoly@l#2\@empty#3+#4\@empty}}%
        }%
    \fi \fi
    \pld@next}
\def\pld@SubtractPoly@r#1+\relax+\@empty{%
    \pld@AddToPoly\pld@tempoly{#1}%
    \def\pld@last@remainder{#1}}                                 % !!!
\makeatother
\def\strut{\rule[-6pt]{0pt}{12pt}}

\begin{document}
\polylongdiv{x^5-1}{x-1}

\polylongdiv{x^5-x^2}{x^2-1}

\polylongdiv{\frac{3}{7}x^9+x^2-\frac{1}{4}}{\frac{9}{5}x^4-1}

\polylongdiv{x^9+x^2-1}{x^4-x}

\polylongdiv{x^{15}+1}{x^5+x^3+x+1}

\polylongdiv{x^4-1}{x^2-1}
\end{document}
Related Question