在超链接中使用宏之前,如何展开或取消标记宏?

在超链接中使用宏之前,如何展开或取消标记宏?

因此,我有一些信息存储在一个宏中,该宏已在其他地方使用,并且可以包含类似\small或类似的格式化宏,我想在将内容用作超链接的主题之前扩展或取消标记这些命令。这是我期望的工作:

\documentclass{article}
\usepackage{hyperref}

\def\subject{\small This is my subject}

\begin{document}
    \href{mailto:[email protected]?subject=\expandafter\detokenize{\subject}}{Send an email}
\end{document}

然而在这种情况下\subject它永远不会扩展,正如您从 PDF 查看器中看到的那样:

在此处输入图片描述

\subject那么,扩展并从而摆脱的适当方法是什么\small

答案1

非常类似于 Jinwin 的答案,但使用可扩展文本扩展器expl3

\documentclass{article}
\ExplSyntaxOn
\cs_new_eq:NN \PurifyText \text_purify:n
\ExplSyntaxOff

\usepackage{hyperref}

\def\subject{\small This is my subject}

\begin{document}

\href{mailto:[email protected]?subject=\detokenize\expandafter{\expanded{\PurifyText{\subject}}}}{Send an email}

\end{document}

这里\text_purify:n 删除格式。

答案2

如果您的格式化宏在 detokenize 之后不包含空格,那么您可以使用\StrBehind包来xstring提取第一个空格后的文本。

\documentclass{article}
\usepackage{hyperref}
\usepackage{xstring}

\def\subject{\small This is my subject}

\begin{document}

\StrBehind{\detokenize\expandafter{\subject}}{ }[\temp]

\href{mailto:[email protected]?subject=\temp}{Send an email}

\end{document}

在此处输入图片描述

相关内容