因此,我有一些信息存储在一个宏中,该宏已在其他地方使用,并且可以包含类似\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}