根据 \jobname 的首字母设置 \section 计数器

根据 \jobname 的首字母设置 \section 计数器

相关LaTeX 中文件名的子字符串从 \jobname 中提取数字作为计数器

我将文件名命名为、01-text1.tex等等。我想根据前两个字母(数字)设置我的节计数器。例如02-something.tex03-blah.tex

\setcounter{section}{\StrLeft{\jobname}{2}}
\addtocounter{section}{-1}

这不太成功,可能是 catcodes :-(。有人可以推荐有效的魔法调用吗?

答案1

如果要将其内联到\setcounter xstring大多数不可扩展的命令中,则需要一个可扩展的命令。

\def\getprefix#1-#2\relax{#1}
\setcounter{section}{\expandafter\getprefix\jobname\relax}

应该管用。

虽然中的字母确实\jobname有奇怪的 catcode,但这实际上不是问题,因为数字是通常的 catcode 12。

答案2

常见的问题:这是不可扩展的。

解决方法:预先计算字符串:

\documentclass{article}
\usepackage{xstring}

\begin{document}

\StrLeft{\jobname}{2}[\temp]
\setcounter{section}{\temp}
\addtocounter{section}{-1}

\section{Title}
text

\end{document}

更简单的解决方案:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\setcounter{section}{ \str_range:Nnn \c_sys_jobname_str { 1 } { 2 } }
\addtocounter{section}{-1}
\ExplSyntaxOff

\begin{document}

\section{Title}
text

\end{document}

当然还有一个较低级别的解决方案,但是没那么有趣:

\documentclass{article}

\begingroup\def\welch#1#2#3\welch{#1#2}
\setcounter{section}{\expandafter\welch\jobname..\welch}
\addtocounter{section}{-1}
\endgroup

\begin{document}

\section{Title}
text

\end{document}

相关内容