我正在尝试制作一个命令,它将获取标签列表并用来psfrag
隐藏它们。在我的图中,X3 被删除,但 X1、X2 和 X7 仍然存在。
我需要做一些特别的事情才能\thing
在\HideLabel
命令中使用 foreach 计数器吗
\documentclass{article}
\usepackage[margin=20mm]{geometry}
\usepackage{pgffor}
\usepackage{psfrag}
\usepackage{graphicx}
\usepackage[runs=2,crop=off]{auto-pst-pdf}
\newcommand{\HideLabel}[1]{\foreach \thing in {#1} {%
\psfrag{\thing}{}}
}
\begin{document}
\begin{figure}[ht!]
\centering
\HideLabel{X1,X2,X7}
\psfrag{X3}{}
\includegraphics[scale=1]{Figure}
\caption{Figure caption}
\label{Figure1}
\end{figure}
\end{document}
答案1
问题是它在命令使用的\psfrag
环境范围内有效。由于为列表中的每个项目都创建了新范围,因此命令无法到达调用(因为执行时 foreach 项目的范围已经结束)。\psfrag
\foreach
\psfrag
\includegraphics
\includegraphics
或者,您可以使用etoolbox
包的列表处理功能,它不会创建新的范围。
MWE(我制作了一个带有七个标签的小图表,因为我不想从未知位置下载文件):
\documentclass{article}
\usepackage[margin=20mm]{geometry}
\usepackage{graphicx}
\usepackage{psfrag}
\usepackage[runs=2,crop=off]{auto-pst-pdf}
\usepackage{etoolbox}
\newcommand{\HideLabel}[1]{%
\renewcommand*{\do}[1]{\psfrag{##1}{}}%
\docsvlist{#1}%
}
\begin{document}
\begin{figure}[ht!]
\centering
\includegraphics[width=0.5\textwidth]{replacelabels}
\caption{Original figure}
\label{Figure1}
\end{figure}
\begin{figure}[ht!]
\centering
\HideLabel{X1,X2,X7}
\includegraphics[width=0.5\textwidth]{replacelabels}
\caption{Hidden labels}
\label{Figure2}
\end{figure}
\end{document}
结果: