我目前正在使用该包showkeys
调试文档中的标签。使用命令\renewcommand{\showkeyslabelformat}[1]{...}
可以自定义标签的显示。我想以不同于其他标签的方式处理方程式标签(以 开头的标签)。因此,我想使用eq:
测试标签是否以 开头。不知何故,这似乎不起作用。eq
xstring
这是一个最小的工作示例:
\documentclass{article}
\usepackage{amsmath}
\usepackage{showkeys}
\usepackage{xstring}
\begin{document}
% FIRST BLOCK
\renewcommand*\showkeyslabelformat[1]{%
\fbox{\small\ttfamily\StrBefore{#1}{:}}}
\textbf{Lemma.} \label{lemma:no_equation}
\begin{equation} \label{eq:my_equation}
\sum_{i=0}^\infty 2^{-1} = 2
\end{equation}
% SECOND BLOCK
\renewcommand*\showkeyslabelformat[1]{%
\fbox{\small\ttfamily\IfBeginWith{#1}{eq}{equation}{no equation}}}
\textbf{Lemma.} \label{lemma:no_equation}
\begin{equation} \label{eq:my_equation}
\sum_{i=0}^\infty 2^{-1} = 2
\end{equation}
\end{document}
输出如下所示:
如您所见,xstring
能够正确解析标签的第一部分。但它仍然无法以字符串开头作为条件。我在这里遗漏了什么?
答案1
正则表达式与expl3
类别代码无关。
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{showkeys}
\newtheorem{lemma}{Lemma}
\ExplSyntaxOn
\NewDocumentCommand{\beginwithTF}{mmmm}
{% #1 = string to search in, #2 = string to search, #3 = true, #4 = false
\regex_match:nnTF { \A #2\: } { #1 } { #3 } { #4 }
}
\ExplSyntaxOff
\renewcommand*\showkeyslabelformat[1]{%
\fbox{\small\ttfamily\beginwithTF{#1}{eq}{equation}{no equation}}}
\begin{document}
\begin{lemma} \label{lemma:B}
\begin{equation} \label{eq:B}
\sum_{i=0}^\infty 2^{-1} = 2
\end{equation}
\end{lemma}
\end{document}
使用\regex_match:nnTF
我们查看给定的正则表达式(第一个参数)是否与给定的字符串(第二个参数)匹配。不过,我保留了 中的参数顺序\IfBeginWith
。
答案2
showkeys 使事情变得安全,\meaning
以便带有&
或$
或其他特殊字符的标签在排版时不会爆炸。因此,您正在比较 catcode 12(“其他”)eq
和 catcode 11(字母)eq
,而它们是不相等的。