显示小数

显示小数

这是显示小数除法的一种方法。我已经指出了我面临的问题。我怀疑这里需要使用一些计算。

在此处输入图片描述

我知道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}

相关内容