检查标签文本是否为空

检查标签文本是否为空

我正在尝试检查文本标签是否为空。为此,我尝试使用\ifblanketoolbox 包中的命令。在以下 MWE 中,我预计它\refdescx{\nameref{lab2}}会返回文本“EMPTY”:

\documentclass[hidelinks,oneside]{book}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{cleveref}

\makeatletter
\newcommand{\refdescx}[1]{%
  \protected@edef\@tempa{#1}%
  \expandafter\ifblank\expandafter{\@tempa}{EMPTY}{NOT EMPTY'}%
}
\makeatother

\begin{document}
\chapter{First chapter}

\section{First section}
\label{lab1}

\section{}
\label{lab2}

\section{Third section}
\label{lab3}

References:  ``\ref{lab1}'' ``\ref{lab2}''\newline
Names:  ``\nameref{lab1}'' ``\nameref{lab2}''\newline
Check empty: ``\refdescx{\nameref{lab1}}'' ``\refdescx{\nameref{lab2}}''
\end{document}

答案1

通常,引用命令不可扩展:如果引用未知,它们会发出一条消息,而 hyperref 会添加链接。
您可以使用包 refcount,它允许以可扩展的方式检索值:

\documentclass[hidelinks,oneside]{book}
\usepackage{etoolbox}
\usepackage{hyperref,refcount}
\usepackage{cleveref}

\makeatletter
\newcommand{\refdescx}[1]{%
  \protected@edef\@tempa{#1}%
  \expandafter\ifblank\expandafter{\@tempa}{EMPTY}{NOT EMPTY'}%
}
\makeatother

\begin{document}
\chapter{First chapter}

\section{First section}
\label{lab1}

\section{}
\label{lab2}

\section{Third section}
\label{lab3}

References:  ``\ref{lab1}'' ``\ref{lab2}''\newline
Names:  ``\nameref{lab1}'' ``\nameref{lab2}''\newline
Check empty: ``\refdescx{\getrefbykeydefault{lab1}{name}{}}'' ``\refdescx{\getrefbykeydefault{lab2}{name}{}}''
\end{document}

在此处输入图片描述

相关内容