![如何以编程方式排版带有连接括号和线的多项式长除法?(可能使用 TikZ)](https://linux22.com/image/451647/%E5%A6%82%E4%BD%95%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E6%8E%92%E7%89%88%E5%B8%A6%E6%9C%89%E8%BF%9E%E6%8E%A5%E6%8B%AC%E5%8F%B7%E5%92%8C%E7%BA%BF%E7%9A%84%E5%A4%9A%E9%A1%B9%E5%BC%8F%E9%95%BF%E9%99%A4%E6%B3%95%EF%BC%9F%EF%BC%88%E5%8F%AF%E8%83%BD%E4%BD%BF%E7%94%A8%20TikZ%EF%BC%89.png)
我通常可以\polylongdiv{<dividend>}{<divisor>}
使用polynom
包裹:
但我想知道,
如何以编程方式排版带有连接括号和线的多项式长除法?(可能使用 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,因为您可以更好地控制线条绘制和行为本身。
您可以调整路径中的in
、out
、参数来实现所需的曲线。以下是一些示例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);