我正在使用 PGFgroupplots
库创建包含许多图像的图像网格。我正在使用 for 循环\pgfplotsforeachungrouped
。
每个文件名的结构如下:preamble_title_percent.jpg
。我想通过拆分文件名来提取标题和百分比值。因此,我可以使用标题和百分比作为中的值\nextgroupplot
。我该怎么做?
\foreach
与PGF 中的普通函数不同,\pgfplotsforeachungrouped
它仅使用两个参数。因此,我猜,它是在 中动态提取标题和百分比的唯一方法\edef
。
伪代码:
\pgfplotsforeachungrouped \filename in {
preamble_title_percent.jpg
}
{
\edef\temp{
# How can I split the filename here?
\def\title{???}
\def\percent{???}
\noexpand\nextgroupplot[
title=\title,
scale only axis,
enlargelimits=false,
axis on top,
xticklabels={},
yticklabels={},
colormap={blackwhite}{[1pt]
rgb255(0 pt)=(0, 63, 92);
rgb255(\percent pt)=(0, 63, 92);
rgb255(16 pt)=(166,188,198);
rgb255(20pt)=(166,188,198)
},
colorbar,
point meta min = 0,
point meta max = 20,
colorbar style = {
at={(0.9,0.65)},anchor=north west,
height = 3cm,
width = 0.3cm,
yticklabel pos=left,
yticklabel style = {
text width = 2em,
align = right,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision = 0,
/tikz/.cd
}
}
]
\noexpand\addplot[thick]
graphics [
xmin=0,
ymin=0,
xmax=600,
ymax=450
]{\noexpand\root /\filename}; %
}
\temp
}
答案1
使用xparse
(现在大多数 TeX 发行版都内置了它),您可以使用它\SplitArgument
来将参数拆分为某个字符,包括特殊字符。如果我们\splitAtUnder
为下划线和\splitAtPeriod
句点定义一个宏,我们就可以从文件名称中提取标题和百分比值。
\documentclass{standalone}
%\usepackage{xparse} % uncomment if you have an older TeX distribution
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.18}
\NewDocumentCommand\splitAtUnder {>{\SplitArgument{2}{_}} m}{\assignValues#1}
\NewDocumentCommand\splitAtPeriod{>{\SplitArgument{1}{.}} m}{\assignPercent#1}
\def\assignValues#1#2#3{
\gdef\subplotTitle{#2}
\splitAtPeriod{#3}
}
\def\assignPercent#1#2{
\gdef\percent{#1}
}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[group style={{group size=2 by 2},vertical sep=2cm}]
\pgfplotsforeachungrouped \filename in {
example_cat_10.jpg,
example_dog_20.jpg,
example_duck_30.jpg,
example_penguin_40.jpg
}
{
\edef\splitAtUnderAxis{
\splitAtUnder{\filename}
}
\splitAtUnderAxis
\edef\setAxis{
\noexpand\nextgroupplot[
title=\noexpand\bfseries\subplotTitle,
colormap={blackwhite}{[1pt]
rgb255(0pt) = ( 0, 63, 92);
rgb255(\percent pt) = ( 0, 63, 92);
rgb255(50pt) = (166,188,198);
rgb255(60pt) = (166,188,198);
},
]
\noexpand\addplot[thick] graphics[xmin=0,ymin=0,xmax=600,ymax=450]{\filename};
}
\setAxis
}
\end{groupplot}
\end{tikzpicture}
\end{document}
让我们看看这段代码实际上产生了什么。给定四张具有以下文件名的图像,
example_cat_10.jpg
example_dog_20.jpg
example_duck_30.jpg
example_penguin_40.jpg
然后 PGFPlots 将自动用图像文件名中间部分的名称为每个图添加标题:
(四张图片均来自 Pixabay。)