在 pgf for 循环中组装的表中出现额外的行

在 pgf for 循环中组装的表中出现额外的行

我正在 中逐行构建表格\pgfplotsforeachungrouped。在\hline循环的最后一轮结束时,在 之后出现了一行不需要的行,这可以从输出中左列下方的单个小数点看出。这乍一看不太合理,难道它不是循环最后一步的结尾吗?

我已经从另一个问题中解开了这个问题,这是一个我自己解决的次要问题,所以我自己回答了这个问题,以防它最终对其他人有用。

笔记:请参阅下面的附录来了解我提出这个问题的原因。

MWE 输出

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

解决方案输出

相关内容