相关LaTeX 中文件名的子字符串和从 \jobname 中提取数字作为计数器。
我将文件名命名为、01-text1.tex
等等。我想根据前两个字母(数字)设置我的节计数器。例如02-something.tex
03-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}