![显示小数](https://linux22.com/image/457605/%E6%98%BE%E7%A4%BA%E5%B0%8F%E6%95%B0.png)
这是显示小数除法的一种方法。我已经指出了我面临的问题。我怀疑这里需要使用一些计算。
我知道xlop
存在,但出于几个原因,我正在开发一个LuaTex
工具来显示一些人类的计算
这是使用的 MWE。
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{*{10}{l}}
1 & 2 & 3 & & & \rlap{14}
\\
& 1 & 1 & 0 & & \rlap{8.7857142}
\\
& & 1 & 2 & 0
\\
& & & & 8 & 0
\\
& & & & 1 & 0 & 0
\\
& & & & & & 2 & 0
\\
& & & & & & & 6 & 0
\\
& & & & & & & & 4 & 0
\\
& & & & & & & & 1 & 2
\CodeAfter
\begin{tikzpicture}
\draw (1-|6) -- (3-|6) ;
\draw (2-|6) -- (2-|7) ;
\end{tikzpicture}
\end{NiceTabular}
\end{document}
答案1
我知道您的图表不是人写的,但无论如何这里有一个不同的解决方案。
我会将矩阵的内容(个位数)与带有线条的部分分离。
这里我设置了一个矩阵,其中第二行中的每个节点都获得别名dd@matrix-lastentry
。当然,只有行中的最后一个节点实际上拥有这个名称。(→ 请不要有空节点。)
然后,在矩阵之后,此节点用于放置结果和除数。由于我没有使用 arow sep
或 a,column sep
因此节点彼此紧密相邻,我在这里重新创建了它。
下一步,我将利用两个节点高度相同的事实,让 TikZ 围绕这些节点创建一个伪节点(与库的fit
工作方式非常相似),并参考该节点绘制两条线。
如果单元格的内容更复杂,则需要进行调整和微调,但我认为这不是必需的。
所有inner sep
节点的设置tikzpicture
使得两个额外节点具有与矩阵节点相同的填充并混合在一起。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\tikzset{
every DecimalDivision diagram/.style={
inner sep=+.25em, % tighter nodes → no row sep or column sep
M/.style={every DecimalDivision matrix/.append style={##1}},
t/.style={DecimalDivision top={##1}},
b/.style={DecimalDivision bottom={##1}}},
every DecimalDivision matrix/.style={
every outer matrix/.append style={inner sep=+0pt},
matrix of nodes,
row 2/.append style={nodes={alias=dd@matrix-lastentry}}},
DecimalDivision top/.initial=1,
DecimalDivision bottom/.initial=1}
\newenvironment*{DecimalDivision}[1][]{%
\begin{tikzpicture}[every DecimalDivision diagram,#1]
\matrix[every DecimalDivision matrix]\bgroup
}{%
\\\egroup;
\draw[local bounding box=dd@matrix] % a simple “fit”
node[anchor=north west,
xshift=width("0")+2*(\pgfkeysvalueof{/pgf/inner xsep})] (dd@matrix-bottom)
at ([email protected] east) {
\pgfkeysvalueof{/tikz/DecimalDivision bottom}}
node[anchor=south west]
at ([email protected] west) {
\pgfkeysvalueof{/tikz/DecimalDivision top}}
([email protected] west)--([email protected] west)
([email protected]) --([email protected]);
\end{tikzpicture}
}
\begin{document}
\begin{DecimalDivision}[t=14, b=8.7857142]
1 & 2 & 3 \\
& 1 & 1 & 0 \\
& & 1 & 2 & 0 \\
& & & & 8 & 0 \\
& & & & 1 & 0 & 0 \\
& & & & & & 2 & 0 \\
& & & & & & & 6 & 0 \\
& & & & & & & & 4 & 0 \\
& & & & & & & & 1 & 2
\end{DecimalDivision}
\begin{DecimalDivision}[t=8, b=1.5]
1 & 2 \\
& 4 & 0 \\
& & 0
\end{DecimalDivision}
\end{document}
输出
答案2
按照 David Carlisle 的建议,即以图形方式思考,而不是考虑结果的文本,这里有一个使用 的解决方案tikzmark
。
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{*{10}{l}}
1 & 2 & 3 & & & \rlap{14}
\\
& 1 & 1 & 0 & & \rlap{8.7857142 \tikzmark{END}}
\\
& & 1 & 2 & 0
\\
& & & & 8 & 0
\\
& & & & 1 & 0 & 0
\\
& & & & & & 2 & 0
\\
& & & & & & & 6 & 0
\\
& & & & & & & & 4 & 0
\\
& & & & & & & & 1 & 2
\CodeAfter
\begin{tikzpicture}
\draw (1-|6) -- (3-|6) ;
\draw (2-|6) -- (2-|{pic cs:END}) ;
\end{tikzpicture}
\end{NiceTabular}
\begin{NiceTabular}{*{5}{l}}
1 & 2 & & & \rlap{8}
\\
& 4 & 0 & & \rlap{1.5 \tikzmark{END2}}
\\
& & 0
\CodeAfter
\begin{tikzpicture}
\draw (1-|5) -- (3-|5) ;
\draw (2-|5) -- (2-|{pic cs:END2}) ;
\end{tikzpicture}
\end{NiceTabular}
\end{document}