连续分数 - YAF(另一种格式)

连续分数 - YAF(另一种格式)

此网站中的这篇文章提出以下代码。

\documentclass{article}

\usepackage{amsmath,array}

\begin{document}

\[
\setlength{\arraycolsep}{0pt}
\newcommand{\md}[2][1.45]{\mathbin{\raisebox{-#1ex}[0pt][0pt]{$\displaystyle#2$}}}
\md{A + B ={}}
\begin{array}[t]{ *{13}{>{\displaystyle{\mathstrut}}c<{{}}} }
1 \\
\cline{1-1}
\md{7} & \md{+} & 1 \\
\cline{3-3}
&& \md{15} & \md{+} & 1 \\
\cline{5-5}
&&&& 7 & + & \cfrac{1}{4}
\end{array}
\]

\end{document}

是否有可能获得类似的输出,但具有更好的垂直对齐效果,就像使用标准分数一样?请参见下图中的红色箭头。

在此处输入图片描述

答案1

简单的用户级语法和正确的间距。

\documentclass{article}
\usepackage{mathtools}

\usepackage{lipsum}

\ExplSyntaxOn

\NewDocumentCommand{\altcfrac}{m}
 {
  \projetmbc_altcfrac:n { #1 }
 }

\tl_new:N \l__projetmbc_altcfrac_tl
\tl_new:N \l__projetmbc_altcfrac_last_tl
\seq_new:N \l__projetmbc_altcfrac_seq

\cs_new_protected:Nn \__projetmbc_frac:nn { \dfrac{#1}{#2} }
\cs_new_protected:Nn \__projetmbc_smash:n { \mathrlap{\smash[t]{#1}} }
\cs_new:Nn \__projetmbc_lbrace: { \if_true: { \else: } \fi: }
\cs_new:Nn \__projetmbc_rbrace: { \if_false: { \else: } \fi: }

\cs_new_protected:Nn \projetmbc_altcfrac:n
 {
  \tl_clear:N \l__projetmbc_altcfrac_tl
  \seq_set_from_clist:Nn \l__projetmbc_altcfrac_seq { #1 }
  \seq_pop_right:NN \l__projetmbc_altcfrac_seq \l__projetmbc_altcfrac_last_tl
  \seq_map_inline:Nn \l__projetmbc_altcfrac_seq
   {
    \tl_put_right:Nn \l__projetmbc_altcfrac_tl
     {
      \__projetmbc_frac:nn { 1 } \__projetmbc_lbrace: ##1
      \__projetmbc_smash:n \__projetmbc_lbrace: {} +
     }
   }
  \tl_put_right:Nn \l__projetmbc_altcfrac_tl { \__projetmbc_frac:nn { 1 } \__projetmbc_lbrace: }
  \tl_put_right:NV \l__projetmbc_altcfrac_tl \l__projetmbc_altcfrac_last_tl
  \prg_replicate:nn { (\seq_count:N \l__projetmbc_altcfrac_seq + 1) * 2 - 1 }
   {
    \tl_put_right:Nn \l__projetmbc_altcfrac_tl { \__projetmbc_rbrace: }
   }
  \tl_set:Nx \l__projetmbc_altcfrac_tl { \l__projetmbc_altcfrac_tl }
  \tl_use:N \l__projetmbc_altcfrac_tl
  \hphantom{\seq_use:Nn \l__projetmbc_altcfrac_seq { + } + \l__projetmbc_altcfrac_last_tl }
 }
\ExplSyntaxOff

\begin{document}

\lipsum*[1][1-4]
\[
A=3+\altcfrac{7,15,7,4}
\]
\lipsum*[1][1-4]

\end{document}

这个想法是建立整个系列

\dfrac{1}{7\mathrlap{\smash[t]{{}+\dfrac{1}{15...

一步一步。括号隐藏在扩展至括号的宏中,但我们仅在构建了整个结构后才进行扩展。

接下来我们添加幻影来处理宽度,它足以对分母求和。

在此处输入图片描述

答案2

我建议使用分数中的分数概念。我\smash在提名人中使用了它,以避免提及空格。

$$
  \everymath={\displaystyle}
  A + B = {1\over 7 \rlap{${}+ {\smash 1\over 15
                    \rlap{${}+ {\smash 1\over 7 
                    \rlap{${}+ {\smash 1\over 5}$}}$}}$}} 
$$

答案3

在此处输入图片描述

添加一些负空间...

\documentclass{article}

\usepackage{amsmath,array}

\begin{document}

\[
\setlength{\arraycolsep}{0pt}
\newcommand{\md}[2][1.45]{\mathbin{\raisebox{-#1ex}[0pt][0pt]{$\displaystyle#2$}}}
\md{A + B ={}}
\begin{array}[t]{ *{13}{>{\displaystyle{\mathstrut}}c<{{}}} }
1 \\
\cline{1-1}\noalign{\vspace{-.7ex}}
\md{7} & \md{+} & 1 \\
\cline{3-3}\noalign{\vspace{-.7ex}}
&& \md{15} & \md{+} & 1 \\
\cline{5-5}\noalign{\vspace{-.7ex}}
&&&& 7 & + & \cfrac{1}{4}
\end{array}
\]

\end{document}

相关内容