如何以编程方式排版带有连接括号和线的多项式长除法?(可能使用 TikZ)

如何以编程方式排版带有连接括号和线的多项式长除法?(可能使用 TikZ)

我通常可以\polylongdiv{<dividend>}{<divisor>}使用polynom包裹: \polylongdiv{6x^3 + 5x^2 - 7}{3x^2 - 2x - 1}

但我想知道,

如何以编程方式排版带有连接括号和线的多项式长除法?(可能使用 TikZ)

与此类似TeX.SX 答案实施于longdivision用于算术长除法的包。

在此处输入图片描述

还可以通过编程排版整个除法过程,例如 \polylongdiv 最好使括号曲线相对于除数看起来居中(?) 并将商结果左对齐于顶部/与被除数的首位系数对齐。

我如何才能实现并定义这个,比如说,\mypolylongdiv{<dividend>}{<divisor>}宏?谢谢。

答案1

简短回答:

\documentclass{article}
\usepackage{polynom}
\usepackage{tikz}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\pld@ArrangeResult}{\bigr)}{
    \,\tikz[overlay]{
        \coordinate (A) at (0,-3pt);
        \coordinate (B) at (0,\normalbaselineskip-0.8pt);
        \draw (A) to[in=-40, out=40, looseness=1] (B);
    }
}{}{}
\makeatother

\begin{document}

\polylongdiv{6x^3+5x^2-7}{3x^2-2x-1}

\end{document}

在此处输入图片描述

详细解答:

为了弄清楚如何解决这个问题,您可能首先需要查找源代码来了解它是如何实现的。

显然,默认情况下它只打印一个括号,所以我决定使用查询)进行简单搜索)

C:\texlive\2022\texmf-dist\tex\latex\polynom

但是你安装的 latex 包的路径可能会有所不同

显然,源代码中没有那么多括号,所以我很快就找到了它

在此处输入图片描述

所以现在只需更改该位即可。由于它位于整个\pld@ArrangeResult命令的定义中,因此您必须将整个代码块以及该命令的完整定义粘贴到您的序言中,并添加所需的更改,将其替换为

\bigr)

或者,有一种方法可以避免复制粘贴,方法是使用\patchcmd来自的命令etoolbox包裹

\patchcmd{command}{search}{replace}{success}{failure}

它允许查找和替换搜索的部分并自动重新定义整个命令。


现在让我们谈谈视觉变化的实现。正如您所建议的,我为此使用了 tikz,因为您可以更好地控制线条绘制和行为本身。

您可以调整路径中的inout、参数来实现所需的曲线。以下是一些示例looseness

\draw (A) to[in=-20, out=20, looseness=1.5] (B);

在此处输入图片描述

\draw (A) to[in=-50, out=20, looseness=1] (B);

在此处输入图片描述

\draw (A) to[in=-15, out=45, looseness=1] (B);

在此处输入图片描述


您还可以调整(A)坐标,使曲线按您的意愿居中

\coordinate (A) at (0,-5pt);

在此处输入图片描述

\coordinate (A) at (0,0);

在此处输入图片描述

相关内容