使用 foreach 隐藏/替换标签

使用 foreach 隐藏/替换标签

我正在尝试制作一个命令,它将获取标签列表并用来psfrag隐藏它们。在我的图中,X3 被删除,但 X1、X2 和 X7 仍然存在。

OneDrive 链接至 EPS 文件

我需要做一些特别的事情才能\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}

结果:

在此处输入图片描述

相关内容