从 \jobname 中提取数字作为计数器

从 \jobname 中提取数字作为计数器

我想使用文件名的一部分作为计数器:

首先我尝试使用变量作为计数器:

mwe_aa_03.tex:

\documentclass{scrartcl}
\usepackage[automark]{scrlayer-scrpage} 
\newcommand{\thatispage}{3} 
\addtocounter{section}{\thatispage} 
\ihead{Page \thatispage }  
\begin{document}
\section{section}
but this should be section 3
\end{document}

这可行,但现在我想使用文件名作为数字:

mwe_bb_03.tex:

\documentclass{scrartcl}
\usepackage[automark]{scrlayer-scrpage} 
\usepackage{xstring}
\newcommand{\fancypagenumber}{\StrBehind[2]{\jobname}{\string_} }
\addtocounter{section}{\fancypagenumber}
\ihead{Page \fancypagenumber }  
\begin{document}
\section{section}
but this should be section 3
\end{document}

这是行不通的(“缺失数字,视为零”)。

你能解释一下我做错了什么吗?我怎样才能让这个字符串变成数字?

答案1

有两个错误。

  1. 你不能\StrBehind在参数中使用\setcounter
  2. 您需要将计数器设置为比所需数字小一,因为\section在排版标题之前会对其进行步骤。
\documentclass{scrartcl}
\usepackage[automark]{scrlayer-scrpage}
\usepackage{xstring}

\StrBehind[2]{\jobname}{\string_}[\fancypagenumber]

\addtocounter{section}{\fancypagenumber}
\addtocounter{section}{-1}
\ihead{Page \fancypagenumber }

\begin{document}
\section{section}
but this should be section 3
\end{document}

在此处输入图片描述

答案2

不使用软件包的另一种方法是,您可以让命令吞噬您想要的部分,只留下数字。请注意,您需要使用,\detokenize{..}因为 的类别代码\jobname

\expandafter\def\expandafter\removemewbb\detokenize{mwe_bb_}{}
\edef\fancypagenumber{\expandafter\removemewbb\jobname}

相关内容