使用 pgffor 的 \foreach 将图形放入表格中

使用 pgffor 的 \foreach 将图形放入表格中

我想使用\includegraphics来排列 EPS 图形(包括 via )。目前,无需任何循环即可完成此操作,如下所示:tabular\foreach

\begin{tabular}{*5{>{\centering\arraybackslash}m{.15\textwidth}}}
    $X_{40}$ & $X_{60}$ & $X_{80}$ & $X_{120}$ & $X_{160}$ \\

    \includegraphics[width=.15\textwidth]{./testrun/testvar_type_X_40.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_X_60.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_X_80.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_X_140.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_X_160.eps} \\

    \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_40.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_60.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_80.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_140.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_160.eps} \\
\end{tabular}

如您所见,第二行和第三行有一些冗余。此外,每行中所有列仅在数字 40、60、80、140、160 上有所不同。所以我的想法是,\foreach在每行中至少使用一个来放置数字。

我这样做的原因是https://tex.stackexchange.com/a/22276。但是,\includegraphics在其中使用似乎不起作用(Argument of \reserved@a has an extra })。这是使用的代码:

\documentclass[draft]{article}

\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}

\usepackage{graphicx}
\usepackage{grffile}
\usepackage{array}
\usepackage{pgffor}
\usepackage{etoolbox}

\begin{document}

\let\tabularContent\empty

\newcommand{\plotChannels}{
    \foreach \channel in {40,60,80,120,160}{
        \begingroup\edef\x{
            \endgroup\noexpand\gappto\noexpand\tabularContent{
                & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_X_\channel.eps}
            }
        }\x
    }
    \gappto\tabularContent{\\}
}

\plotChannels


\begin{tabular}{*6{>{\centering\arraybackslash}m{.15\textwidth}}}
    $X_{40}$ & $X_{60}$ & $X_{80}$ & $X_{120}$ & $X_{160}$ \\

    \tabularContent

    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_40.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_60.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_80.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_140.eps}
    & \includegraphics[width=.15\textwidth]{./testrun/testvar_type_Xest_160.eps} \\
\end{tabular}

\end{document}

感谢您的帮助。

答案1

你漏掉\noexpand\includegraphics

答案2

\documentclass{article}
\usepackage{pgffor,array,ragged2e}
\usepackage[demo]{graphicx}
\newtoks\tabtoks
\newcommand\addtabtoks[1]{\tabtoks\expandafter{\the\tabtoks#1}}
\newcommand*\printtabtoks{\the\tabtoks}

\begin{document}
\tabtoks{}
\addtabtoks{\tabular{*5{>{\Centering}m{.15\textwidth}}@{}l@{}}}
\addtabtoks{$X_{40}$ & $X_{60}$ & $X_{80}$ & $X_{120}$ & $X_{160}$ \\ }
\foreach\channel in {40,60,80,120,160}{% 
  \global\addtabtoks{\includegraphics[width=.15\textwidth]{./testrun/testvar_type_X_\channel} &}}
\addtabtoks{\endtabular}
\printtabtoks

\end{document}

在此处输入图片描述

相关内容