![使用宏向表中添加行(每行的计算字段结果相同)](https://linux22.com/image/370357/%E4%BD%BF%E7%94%A8%E5%AE%8F%E5%90%91%E8%A1%A8%E4%B8%AD%E6%B7%BB%E5%8A%A0%E8%A1%8C%EF%BC%88%E6%AF%8F%E8%A1%8C%E7%9A%84%E8%AE%A1%E7%AE%97%E5%AD%97%E6%AE%B5%E7%BB%93%E6%9E%9C%E7%9B%B8%E5%90%8C%EF%BC%89.png)
我使用本文中的模板宏:使用宏向表中添加行。如果单元格中的值不需要计算,则一切正常。但否则,每行的计算结果都相同。如何避免此问题?日志文件引用:https://yadi.sk/i/vgnoGKni3SLZGD。
\documentclass[oneside,final,14pt]{report}
\usepackage[T1,T2A]{fontenc}
\usepackage{mathptmx}
\usepackage[utf8]{inputenc}
\usepackage{float}
\usepackage{extsizes}
\usepackage{mathtext}
\usepackage{underscore}
\usepackage{enumerate}
\usepackage{enumitem}
\usepackage{titlesec}
\usepackage{times}
\usepackage {listing}
\usepackage{microtype}
\usepackage{xstring}
\usepackage {etoolbox}
\usepackage {expl3}
\usepackage[parse-numbers=true,round-precision=4,round-mode=figures,exponent-product=\cdot]{siunitx}
\usepackage{siunitx} % Provides the \SI{}{} command for typesetting SI units, набор значений единиц измерения
\usepackage {calculator}
\usepackage {fp}
\usepackage {tikz}
\usepackage[space]{grffile}% дополнение, чтобы были пробелы в именах
\grffilesetup{% дополнение, чтобы имена файлов могли быть кириллицей (под Windows)
encoding,
filenameencoding=cp1251
}
\titleformat{\chapter}[display]{\normalfont\bfseries}{}{0pt}{\huge}
\titlespacing*{\chapter}{0pt}{-50pt}{40pt}
\usepackage{verbatim}
%Поддержка отступов
\usepackage{vmargin}
% Работа с надписями
\usepackage{boxedminipage}
%Для окрашивания текста и не только
\usepackage{xparse}
\usepackage[titletoc,toc,page]{appendix}
\usepackage{ifthen}
\usepackage{arrayjobx}
\usepackage {ifpdf}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
%Ссылки и закладки содержание всатвка текста
\usepackage{filecontents}
%control over PDF bookmarks
\usepackage[nameinlink]{cleveref}
\usepackage{indentfirst}
\usepackage{titlesec}
\usepackage{soul}
%Математический пакет
\usepackage{amssymb,amsmath}
\usepackage {rotating}
\usepackage{amscd}
%Для обращения к цвету по имени
\usepackage{color}
\usepackage{xcolor,colortbl}
\usepackage{tabularx}
\usepackage{amssymb,amsfonts,amsmath,amsthm} % математические дополнения от АМС
\usepackage{indentfirst} % отделять первую строку раздела абзацным отступом тоже
\usepackage{multirow} % улучшенное форматирование таблиц
\usepackage{ulem} % подчеркивания
% стиль для для страницы (колонтитулы)
\usepackage{fancyhdr}
%Для списка литературы по ГОСТ
\usepackage[strict]{csquotes}
\makeatletter
\usepackage[english,main=russian]{babel}
\usepackage[square,numbers]{natbib}
%\bibliographystyle{gost2008}
\bibliographystyle{utf8gost705u}
\usepackage{makecell}
\usepackage{amsmath}
\usepackage{amssymb,amsfonts,textcomp}
\usepackage{color}
\usepackage{array}
\usepackage{supertabular}
\usepackage{hhline}
\usepackage{hyperref}
\setlength\tabcolsep{1mm}
\usepackage{tocloft}
\setlength{\cftbeforetoctitleskip}{-15pt}
\usepackage{epstopdf}
\usepackage[space]{grffile} \grffilesetup{encoding,filenameencoding=cp1251}
\usepackage{pdfpages}
\usepackage{xparse}
\usepackage{ifmtarg}% http://ctan.org/pkg/ifmtarg
\begin{document}
\definecolor{danger}{HTML}{FE996B}
\definecolor{safety}{HTML}{9AFF99}
\definecolor{warning}{HTML}{FFA500}
\newcommand\dangColor[3]{
\FPeval{\tmp}{#1}
\FPeval{\tevdd}{#2+#3}
\FPifgt{\tmp}{#3}{\gdef\era{\cellcolor{warning}}}\else{\gdef\era{\cellcolor{danger}}}\fi
\FPifgt{\tmp}{\tevdd}{\gdef\era{\cellcolor{safety}}}\else{}\fi
\era}
\newcommand\foorows{}
\DeclareDocumentCommand{\addtotable}{m O{---} O{---}O{---}}{%
\g@addto@macro\foorows{\hline\@gobble}% Insert horizontal rule and gobble first &
\@for\tmp:=#1\do{%
\expandafter\g@addto@macro\expandafter\foorows
\expandafter{\expandafter&\tmp}%
}%
\expandafter\g@addto@macro\expandafter\foorows
\expandafter{\expandafter}
\expandafter\g@addto@macro\expandafter\foorows
\expandafter{\expandafter}
\expandafter\g@addto@macro\expandafter\foorows
\expandafter{\expandafter}
\FPeval{\neobhTd}{#2 *0.8}
\IfInteger{#2}{\def\neobhT{\num[round-mode = places, round-precision = 0, round-half = up]{\neobhTd}}}{\def\neobhT{---}}
\newboolean{b3}
\newboolean{b4}
\IfInteger{#3}{\setboolean{b3}{true}}{\setboolean{b3}{false}}
\IfInteger{#4}{\setboolean{b4}{true}}{\setboolean{b4}{false}}
\ifthenelse{\boolean{b3} \AND \boolean{b4}}
{\FPeval{\tevd}{#3+#4}
\def\tev{\num[zero-decimal-to-integer]{\tevd}}
\def\ku{\dangColor{\neobhTd}{#3}{#4}}
}
{
\def\tev{---}
\def\ku{}
}
\expandafter\g@addto@macro\expandafter\foorows
\expandafter{\expandafter&\ku\neobhT}
%%
\expandafter\g@addto@macro\expandafter\foorows
{\expandafter&\ku\tev}
\g@addto@macro\foorows{\\}%
}
\newcommand\tabKT{
\begin{table}[htb]
\centering
\resizebox{\textwidth}{!}{%
\begin{tabular}{|c|c|c|c|c|c|c|}
\hline
%\mycccc
\rowcolor[HTML]{96FFFB}
Name 1 &\ Name 2 &\makecell{t1\textsubscript{n}, s} &\makecell{t2\textsubscript{r}, s}&\makecell{t3\textsubscript{b}, s}& \makecell{0,8·t\textsubscript{b}, s}&\makecell{t\textsubscript{e}, s}\\ \hline
\foorows
\hline
\end{tabular}%
}
\caption{My caption}
\label{my-label}
\end{table}
}
\addtotable{name,name}[140][30][120]
\addtotable{name,name}[600][48][400]
\addtotable{name,name}[800][120][200]
\tabKT
\end{document}
答案1
像这样吗?
\documentclass{article}
\usepackage{xparse}
\usepackage{siunitx}
\usepackage[table]{xcolor}
\sisetup{
parse-numbers=true,
round-precision=4,
round-mode=figures,
exponent-product=\ensuremath{{}\cdot{}},
output-decimal-marker={,}
}
\definecolor{danger}{HTML}{FE996B}
\definecolor{safety}{HTML}{9AFF99}
\definecolor{warning}{HTML}{FFA500}
\ExplSyntaxOn
\NewDocumentCommand{\addtotable}{mmmmm}
{
#1 & #2 & #3 & #4 & #5
& \cellcolor{ \yaroslav_color:nnn { #3 } { #4 } { #5 } } \fp_to_decimal:n { #5 * 0.8 }
& \cellcolor{ \yaroslav_color:nnn { #3 } { #4 } { #5 } } \fp_to_decimal:n { #3 + #4 }
\\
\hline
}
\cs_new:Nn \yaroslav_color:nnn
{
\fp_compare:nTF { #1 + #2 > #3*0.8 } { green } { red }
}
\ExplSyntaxOff
\begin{document}
\begin{table}[htb]
\centering
\begin{tabular}{|*{7}{c|}}
\hline
\rowcolor[HTML]{96FFFB}%
Name 1 &\ Name 2 & {$t1_n,s$} & {$t2_r,s$} & {$t3_b,s$} & {$0{,}8\cdot t_b,s$} & {$t_e,s$} \\
\hline
\addtotable{name}{name}{140}{30}{120}
\addtotable{name}{name}{600}{48}{400}
\addtotable{name}{name}{800}{120}{200}
\addtotable{name}{name}{1}{1}{12}
\end{tabular}
\caption{My caption}\label{my-label}
\end{table}
\end{document}