同时循环图表和名称

同时循环图表和名称

我想使用一个公共索引来同时循环两个单独的逗号分隔列表,一个是缩写列表,另一个是名称列表。我想使用缩写将图表导入为 PDF,使用名称来标记它们。

这是我目前所拥有的:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{graphicx}

\def\namelist{"New York", "Illinois","Texas"}
\def\abrevlist{NY,IL,TX}

\begin{document}

\foreach \x in \abrevlist {%
    \newpage
    \section*{\x}  % <-- I want to use the state name here

        \begin{figure}[h!]
        \includegraphics[width=.5\textwidth]{../charts/summary/\x _compare.pdf}
        \caption{\x}  % <-- I want to use the state name here
        \end{figure}

}
\end{document}

这样就可以导入我想要的数字,但州名不会改变。我想用“纽约”替换部分和标题,例如用“NYC”替换“纽约”。

显然,可以创建一个索引\i并循环遍历该索引以根据需要索引缩写或名称。但我无法做到这一点。有什么建议吗?谢谢!

答案1

如果您在其他地方不需要这两个列表,那么您可以将它们合并到一个列表中:

\documentclass[12pt]{article}
%\usepackage{tikz}
\usepackage{pgffor}
\usepackage{graphicx}

\def\namelist{New York/NY,Illinois/IL,Texas/TX}


\begin{document}

\foreach \x/\y in \namelist {%
    \newpage
    \section*{\x}  % <-- I want to use the state name here

    \begin{figure}[h!]
 %        \includegraphics[width=.5\textwidth]{../charts/summary/\x _compare.pdf}
          \texttt{../charts/summary/\y-compare.pdf}
         \caption{\x}  % <-- I want to use the state name here               
    \end{figure}

    }
\end{document}

(此\texttt部分厚颜无耻地抄袭自@egreg)

没有必要加载全部tikzpgffor这样就足够了。

在此处输入图片描述

答案2

\documentclass[12pt]{article}
\usepackage{tikz}

\def\namelist{"New York", "Illinois","Texas"}
\def\abrevlist{NY,IL,TX}

\begin{document}

\foreach \X [count=\Y starting from 0] in \abrevlist {%
    \newpage\pgfmathsetmacro{\mystate}{{\namelist}[\Y]}
    \section*{\mystate}  % <-- I want to use the state name here

        \begin{figure}[h!]
        %\includegraphics[width=.5\textwidth]{../charts/summary/\X _compare.pdf}
        \caption{\X}  % <-- I want to use the state name here
        \end{figure}

}
\end{document}

答案3

这是我的建议。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\maketwoprongedlist}{m m}
 {
  \prop_new:c { g_squipbar_list_#1_plist }
  \seq_new:c { g_squipbar_list_#1_seq }
  \clist_map_inline:nn { #2 }
   {
    \__squipbar_list_entry:nnn {#1} ##1
   }
 }

\cs_new_protected:Nn \__squipbar_list_entry:nnn
 {
  \seq_gput_right:cn { g_squipbar_list_#1_seq } { #2 }
  \prop_gput:cnn { g_squipbar_list_#1_plist } { short@#2 } { #2 }
  \prop_gput:cnn { g_squipbar_list_#1_plist } { long@#2 } { #3 }
 }

\NewDocumentCommand{\usetwoprongedlist}{m +m}
 {
  \cs_set_protected:Nn \__squipbar_list_entry:nn { #2 }
  \seq_map_inline:cn { g_squipbar_list_#1_seq }
   {
    \__squipbar_list_entry:nn
     { \prop_item:cn { g_squipbar_list_#1_plist } { short@##1 } }
     { \prop_item:cn { g_squipbar_list_#1_plist } { long@##1 } }
   }
 }

\ExplSyntaxOff

\maketwoprongedlist{states}{
  {NY}{New York},
  {IL}{Illinois},
  {TX}{Texas}
}

\begin{document}

\usetwoprongedlist{states}{%
  \newpage
  \section*{#2}  % <-- I want to use the state name here

  \begin{figure}[h!]
  \centering
  %\includegraphics[width=.5\textwidth]{../charts/summary/\x _compare.pdf}
  \texttt{../charts/summary/#1-compare.pdf}
  \caption{#2}  % <-- I want to use the state name here
  \end{figure}
}

\end{document}

在此处输入图片描述

由于我没有您的照片,因此我仅通过打印文件名来模拟它们。

这是如何运作的?

首先,我定义一个列表并为其命名。项目以逗号分隔,应由 组成{<abbreviation>}{<full name>}。第一部分也用于索引,因此它应该仅由字符组成(但如果需要,这可能会被克服)。

然后将每个部分作为属性列表中的项目存储,索引为short@<abbreviation>long@<abbreviation>。还维护一个包含缩写的序列,以供以后使用;顺序将与输入的顺序相同。

\usetwoprongedlist命令有两个参数:第一个是需要处理的列表;第二个参数是一个模板,就像的主要参数一样\foreach;不同之处在于#1#2用于表示当前项目的短版本和长版本。

定义一个暂存函数,然后映射索引列表项的序列,并使用参数调用暂存函数

\prop_item:cn {<list name>} { short@<current item> }

\prop_item:cn {<list name>} { long@<current item> }

分别。

相关内容