xstring 中的字符串操作

xstring 中的字符串操作

我正在尝试使用 xstring 包进行字符串操作。

例如\myparam等于这个:1.1 Optimal solution of RNASP

但是字符串函数不起作用。例如\StrLeft{\myparam}{10}给出以下错误:Missing control sequence inserted. ...RNASP.\relax }}{10}{figure.caption.8}

我这样设置:\def\myparamDet{\detokenize{myparam}}

\myparamDet等于:\hyper@linkstart {link}{\Hy@tocdestname }{\numberline {1.1}{\ignorespaces Optimal solution of RNASP.\relax }}\hyper@-linkend

去标记化之后,\StrLeft{\myparamDet}{10}效果如下:\hyper@lin

所以我需要两样东西:

  • 从 myparam获取1.1并将其设置为新变量
  • 1.1从 myparam 中删除

答案1

使用\detokenize,您可以发现\myparam真正相等的是什么,它不是一个字符串,而是一个设置了各种参数的超链接宏。因此,您需要设置辅助宏以从列表中获取正确的参数和子参数。

\documentclass{article}
\usepackage{hyperref}
\makeatletter
\def\myparam{\hyper@linkstart {link}{\Hy@tocdestname }{\numberline {1.1}{\ignorespaces Optimal solution of RNASP.\relax }}\hyper@linkend}
\newcommand\getmystring[1]{\expandafter\argfouroffive#1}
\newcommand\argfouroffive[5]{\xdef\NL{\argtwoofthree#4}\xdef\Mys{\argthreeofthree#4}}
\newcommand\argtwoofthree[3]{#2}
\newcommand\argthreeofthree[3]{#3}
\makeatother
\begin{document}
\getmystring\myparam

Number is \NL

String is \Mys
\end{document}

在此处输入图片描述

相关内容