我想使用一个公共索引来同时循环两个单独的逗号分隔列表,一个是缩写列表,另一个是名称列表。我想使用缩写将图表导入为 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)
没有必要加载全部tikz
,pgffor
这样就足够了。
答案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> }
分别。瞧。