我想创建一个环境来轻松列出一堆子图及其说明。但说明应该只出现在完整图的标题中,而不是子图的标题中。
为了解决这个问题,我设计了一个环境,使用命令将子图标题附加到宏中。但是,当我尝试引用结果标题中子图的标签(动态创建)时,它们都引用最后一个子图。我曾经将其\expandafter
附加到我的收集宏中,所以我怀疑这可能是问题所在。
相应的 MWE:
\documentclass{article}
\usepackage{calc}
\usepackage{subcaption}
\usepackage[demo]{graphicx}
%
% ===================== %
% smallSubfigExplained %
% ===================== %
\newlength\sseWidth
\def\sseExplanationOutput{}
\newcounter{sseTotalCounter}
\newcounter{sseCounter}[sseTotalCounter]
\newenvironment{smallSubfigExplained}{%
\stepcounter{sseTotalCounter}
\def\sseExplanationOutput{}
}{%
\caption[cap]{\sseExplanationOutput}
}
\newcommand\sseItem[1]{%
\stepcounter{sseCounter}
\def\lblname{sse:\thesseTotalCounter-\thesseCounter}
\expandafter\def\expandafter\sseExplanationOutput\expandafter{%
\sseExplanationOutput
\textbf{\subref{\lblname}})
#1
}
\begin{subfigure}[b]{0.4\textwidth}
\centering
\rule{2cm}{2cm}
\caption{}
\label{\lblname}
\end{subfigure}
}
\begin{document}
\begin{figure}
\centering
\begin{smallSubfigExplained}
\sseItem{subfig expl 1}
\sseItem{second subfig expl}
\end{smallSubfigExplained}
\end{figure}
\end{document}
截屏:
答案1
\def
on的使用\sseExplanationOutput
是自引用的,它不适用于\def
。通常,你会使用\edef
,但在这种情况下,\subref{}
不适用于\edef
,因此你需要\protected@edef
:
\documentclass{article}
\usepackage{calc}
\usepackage{subcaption}
\usepackage[demo]{graphicx}
%
% ===================== %
% smallSubfigExplained %
% ===================== %
\newlength\sseWidth
\def\sseExplanationOutput{}
\newcounter{sseTotalCounter}
\newcounter{sseCounter}[sseTotalCounter]
\newenvironment{smallSubfigExplained}{%
\stepcounter{sseTotalCounter}
\def\sseExplanationOutput{}
}{%
\caption[cap]{\sseExplanationOutput}
}
\makeatletter
\newcommand\sseItem[1]{%
\stepcounter{sseCounter}
\def\lblname{sse:\thesseTotalCounter-\thesseCounter}
\protected@edef\sseExplanationOutput{%
\sseExplanationOutput
\textbf{\subref{\lblname}})
#1
}
\begin{subfigure}[b]{0.4\textwidth}
\centering
\rule{2cm}{2cm}
\caption{}
\label{\lblname}
\end{subfigure}
}
\makeatother
\begin{document}
\begin{figure}
\centering
\begin{smallSubfigExplained}
\sseItem{subfig expl 1}
\sseItem{second subfig expl}
\end{smallSubfigExplained}
\end{figure}
\end{document}