此网站中的这篇文章提出以下代码。
\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}