我正在尝试检查文本标签是否为空。为此,我尝试使用\ifblank
etoolbox 包中的命令。在以下 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}