对于持续的值,我尝试了这个并且它的结果如下:
命令是
\TabVal[decimals](startvalue)[step]{numbers}{function}{text1}{text2}[width 2nd column]
所以这个代码并不好,因为我不理解我尝试的所有事情。
\documentclass{article}
\usepackage{xfp,expl3,l3keys2e}
\usepackage{xintexpr}
\usepackage{siunitx}
\ExplSyntaxOn
\cs_new_protected:Npn \For #1#2#3#4
{
\int_step_function:nnnN {#1} {#2} {\fp_eval:n {#1+(#3-1)*#2}} #4
}
\ExplSyntaxOff
\ExplSyntaxOn
\NewDocumentCommand{\Zuord}{mmO{2}}{%
\def\xX{#1}
\num{\fpeval{round(#2,#3)}}
}
\ExplSyntaxOff
\NewDocumentCommand{\xVal}{m}{&\num{#1}}
\NewDocumentCommand{\FVal}{m}{&\Zuord{#1}{\funci}[\Dez]}
\NewDocumentCommand{\TabVal}{O{2}D(){1}O{1}mmmmO{0.8cm}}
{\def\funci{#5}\def\Dez{#1}
\begin{tabular}{c*{#4}{|>{\centering\arraybackslash}p{#8}}}
$#6$ \For{#2}{#3}{#4}\xVal \\\hline
$#7$ \For{#2}{#3}{#4}\FVal
\end{tabular}}
\begin{document}
\TabVal[1](3)[4]{8}{ln(\xinttheexpr \xX! \relax)}{x}{\ln(x!)}[0.7cm]
\end{document}
但是对于值列表,我尝试了以下方法,但第二列中的值应该根据第一列中的值计算得出。然后我想结合这两种不同的方法,但我做不到。
如果有人能帮助我,我会非常高兴。
\documentclass{article}
\usepackage{xfp,expl3,l3keys2e}
\usepackage{xintexpr}
\usepackage{siunitx}
\usepackage[distiller]{pstricks}
\ExplSyntaxOn
\NewDocumentCommand{\Zuord}{mmO{2}}{%
\def\xX{#1}
\num{\fpeval{round(#2,#3)}}%sin(3.5)/2 + 2e-3
}
\ExplSyntaxOff
\NewDocumentCommand{\werteT}{mm}
{%
\begin{tabular}{ >{\centering\arraybackslash}p{0.5cm}|>{\centering\arraybackslash}p{0.8cm} }
$x$ & $f(x)$ \\\hline
\werte{#1}{#2}
\end{tabular}
}
\ExplSyntaxOn
\NewDocumentCommand{\werte}{mm}
{
\tl_clear:N \l_tmpa_tl
\int_step_inline:nnnn { 1 } { 1 } { \clist_count:n { #1 } }
{
\tl_put_right:Nx \l_tmpa_tl
{
\clist_item:nn { #1 } { ##1 } &
\clist_item:nn { #2 } { ##1 }
\exp_not:n { \\ }
}
}
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
\def\funci{(\xX)^2 + 3}
\werteT{1, 2, 3.5, 4}
{\Zuord{1}{\funci}[2],\Zuord{2}{\funci}[2],\Zuord{3.5}{\funci}[2],\Zuord{4}{\funci}[2]}
\end{document}
答案1
主要问题是映射从一个单元格开始而在另一个单元格结束,这是不可能的,因为表格单元格会形成组。
这是一个更简单的实现,其中表行是预先构建的;指定函数的语法更好:变量用 表示#1
。
\documentclass{article}
\usepackage{xparse}
\usepackage{siunitx}
\ExplSyntaxOn
\NewDocumentCommand{\functiontable}{mmO{2}}
{% #1 = list of values, #2 = function, #3 = number of decimal digits
\thomas_functiontable:nnn { #1 } { #2 } { #3 }
}
\seq_new:N \__thomas_functiontable_rows_seq
\cs_new_protected:Nn \thomas_functiontable:nnn
{
\cs_set:Nn \__thomas_functiontable_function:n { #2 }
\seq_clear:N \l__thomas_functiontable_rows_seq
\clist_map_inline:nn { #1 }
{
\seq_put_right:Nx \l__thomas_functiontable_rows_seq
{
##1 & \num{ \fp_eval:n { round( \__thomas_functiontable_function:n { ##1 }, #3 ) } }
}
}
\begin{tabular}{c|c}
$x$ & $f(x)$ \\
\hline
\seq_use:Nn \l__thomas_functiontable_rows_seq { \\ }
\end{tabular}
}
\ExplSyntaxOff
\begin{document}
\functiontable{1, 2, 3.5, 4}{ #1^2+3 }
\bigskip
\functiontable{0, 30, 45, 60, 90}{ sind(#1) }[5]
\end{document}
诀窍是根据第二个参数定义一个临时宏。