我正在 中逐行构建表格\pgfplotsforeachungrouped
。在\hline
循环的最后一轮结束时,在 之后出现了一行不需要的行,这可以从输出中左列下方的单个小数点看出。这乍一看不太合理,难道它不是循环最后一步的结尾吗?
我已经从另一个问题中解开了这个问题,这是一个我自己解决的次要问题,所以我自己回答了这个问题,以防它最终对其他人有用。
笔记:请参阅下面的附录来了解我提出这个问题的原因。
MWE 输出
MWE 代码
\documentclass[12pt]{article}
\usepackage[a5paper,margin=14mm]{geometry}
\usepackage{pgfplots}
\newlength{\xval}
\newlength{\fval}
\pgfplotsset{compat=1.9, /pgf/declare function={F(\x)=(\x+5)*(\x-1)*(\x-5);}}
\def\MyEnd{m}
\def\printplainbefore#1.#2\MyEnd{#1}
\def\printplainafter#1.#2\MyEnd{#2}
\newcommand{\leftdigits}[1]{\pgfmathparse{#1}\expandafter\printplainbefore\pgfmathresult\MyEnd}
\newcommand{\rightdigits}[1]{\pgfmathparse{#1}\expandafter\printplainafter\pgfmathresult\MyEnd}
\tracingmacros=1
\begin{document}
%
\par $f(x)=(x+1)(x-1)(x+5)$
\par\begin{tabular}{r@{.}l r@{.}l}
\hline
\multicolumn{2}{l}{\textbf{\em x}} & \multicolumn{2}{l}{\textbf{\em f}(\textbf{\em x})} \\
\hline
\pgfplotsforeachungrouped \kk in {1,...,5}
{%
\pgfmathsetlength{\global\xval}{\expandafter-6+\kk*2}
\leftdigits{\xval} & \rightdigits{\xval} &
\pgfmathsetlength{\global\fval}{F(\xval)}
\leftdigits{\fval} & \rightdigits{\fval} \\
\ifdim\xval=4pt\hline\fi
}
\end{tabular}
%
\end{document}
附录:我真的很欣赏下面的答案,它展示了一种更好的表格制作方法,但这不是问题所要求的。我收到了很多评论,告诉我不要把问题复杂化,试着集中注意力,在单独的问题中提出次要问题。所以我就是这么做的。这个问题是关于为什么我的输出中会出现多余的一行,我成功地回答了它。
我确实想知道制作表格的更好方法,我会在这个网站上搜索答案。如果我找不到我想要的东西,我会提出一个单独的问题,专门询问制作表格的推荐方法。
答案1
我可以理解使用尽可能少的包的愿望;但是当你加载时,pgfplots
你已经加载了大量的代码。因此,当有更好的包可用时,为什么还要依赖自制的方法来打印表格就不清楚了。
\documentclass{article}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9, /pgf/declare function={F(\x)=(\x+5)*(\x-1)*(\x-5);}}
\newcommand\foreachappendto[2]{%
\xdef#1{\unexpanded\expandafter{\temp}#2}%
}
\begin{document}
$f(x)=(x+1)(x-1)(x+5)$
\medskip
% Build the table body outside the table
\gdef\temp{}
\foreach \kk in {1,...,5}{
\pgfmathparse{2*\kk-6}%
\foreachappendto\temp{\pgfmathresult&}%
\pgfmathparse{F(\pgfmathresult)}%
\foreachappendto\temp{\pgfmathresult\noexpand\\}%
}
\begin{tabular}{
S[table-format=-1.1]
S[table-format=-2.1]
}
\hline
{\boldmath$x$} & {\boldmath$f(x)$} \\
\hline
\temp
\hline
\end{tabular}
\end{document}
答案2
循环可能已完成,但表格尚未完成。\hline
表格在最后一个之后立即开始下一行。通过将紧跟\end{tabular}
在\hline
循环体末尾的后面,可避免这种情况,如下所示。
\ifdim\xval=4pt\hline\end{tabular}\fi