Re: Macro per continued fractions

#65017
Up
0
Down
::


A qualcuno potrebbe interessare la macro per le frazioni continue realizzata con LaTeX3; c’è qualche lieve modifica rispetto alla precedente, ma niente di fondamentale. Il comando \cfracdots può essere usato per indicare omissioni di termini. La cosa in più è la versione asterisco che produce la versione “in linea”.

`\documentclass[a4paper]{article}
\usepackage{amsmath,xparse}

\ExplSyntaxOn
\NewDocumentCommand{\cfracdots}{ }
{
\rule{0pt}{2.5\baselineskip}
\raisebox{\baselineskip}{\quad$\ddots$\quad}
}
\NewDocumentCommand{\xcontfrac}{ s >{\SplitArgument{1}{;}}m }
{
\IfBooleanTF{#1}
{ \cfrac_inline:nn #2 }
{ \cfrac_map:nn #2 }
}

\cs_new:Npn \cfrac_inline:nn #1 #2
{
\IfNoValueTF { #2 }
{
\tl_use:N \c_cfrac_message_tl
\xcontfrac*{;#1}
}
{
\group_begin:
\cs_set_eq:NN \cfracdots \dots
[ \tl_if_empty:nTF { #1 } { 0 } { #1 } ; #2 ]
\group_end:
}
}

\tl_const:Nn \c_cfrac_lbrace_tl { \if_true: { \else: } \fi: }
\tl_const:Nn \c_cfrac_rbrace_tl { \if_false: { \else: } \fi: }
\tl_const:Nn \c_cfrac_strut_tl { \vrule width 0pt depth .3\baselineskip }
\tl_const:Nn \c_cfrac_message_tl
{
\typeout{Wrong~syntax~for~\token_to_str:N \xcontfrac,~
assuming~0~in~the~integer~part,~on~line~\the\inputlineno.}
}
\tl_new:N \l_cfrac_left_tl
\tl_new:N \l_cfrac_right_tl

\cs_new:Npn \cfrac_map:nn #1 #2
{
\tl_clear:N \l_cfrac_left_tl \tl_clear:N \l_cfrac_right_tl
\IfNoValueTF { #2 }
{
\tl_use:N \c_cfrac_message_tl
\xcontfrac{;#1}
}
{
\tl_if_empty:nTF { #1 }
{ \cfrac_map_aux:n { \exp_not:N \use_none:n , #2 } }
{ \cfrac_map_aux:n { #1 , #2 } }
}
}
\cs_new:Npn \cfrac_map_aux:n #1
{
\clist_map_inline:nn { #1 }
{
\tl_put_right:Nn \l_cfrac_left_tl { \cfrac_begin:n { ##1 } }
\tl_put_right:Nn \l_cfrac_right_tl { \exp_not:N \c_cfrac_rbrace_tl }
}
\tl_set:Nx \l_cfrac_left_tl
{ \l_cfrac_left_tl \c_cfrac_strut_tl \l_cfrac_right_tl }
\tl_set:Nx \l_cfrac_left_tl { \l_cfrac_left_tl }
\exp_after:wN \use_none:nnn \l_cfrac_left_tl
}
\cs_new:Npn \cfrac_begin:n #1
{
\exp_not:n
{ + \exp_not:N \cfrac { 1 } \c_cfrac_lbrace_tl #1 }
}
\ExplSyntaxOff

\begin{document}
\begin{gather*}
\xcontfrac*{1;2,3,4}=\xcontfrac{1;2,3,4} \\
\xcontfrac*{;2,3,4}=\xcontfrac{;2,3,4} \\
\xcontfrac*{2,3,4}=\xcontfrac{2,3,4}
\end{gather*}
\end{document}`
Ciao
Enrico

Go to top