我想使用文件名的一部分作为计数器:
首先我尝试使用变量作为计数器:
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
有两个错误。
- 你不能
\StrBehind
在参数中使用\setcounter
- 您需要将计数器设置为比所需数字小一,因为
\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}