我的文件名为“cv3.01.tex”。我想提取“3.01”部分并将其用于文档的页脚,即“Rev 3.01”。
我发现将文件名解析到文档中,但它不适用于我的文件名结构。
以下是基于上述内容的代码:
\documentclass{article}
\makeatletter
\newcommand{\filenameparse}[1]{\expandafter\filename@parse@#1\@nil}
\def\filename@parse@#1\@nil{%
\gdef\fileRev{#1}% first part
}
\makeatother
\begin{document}
\filenameparse{\jobname}
Rev. \fileRev
\end{document}
当然,\fileRev 是“cv3.01”,因为我不知道如何解析它。在上面使用它:
\def\filename@parse@{cv#1}@\nil{%
不起作用。
答案1
这是通常的问题,\jobname
会扩展到类别代码为 12 的字符;但您只需吞噬两个标记。
\documentclass{article}
\makeatletter
\def\getcv@revision#1#2#3\@nil{#3}
\edef\revision{\expandafter\getcv@revision\jobname\@nil}
\makeatother
\begin{document}
This document is Rev~\revision.
\end{document}
允许任何前缀的可定制解决方案:
\documentclass{article}
\makeatletter
\edef\revision@prefix{\detokenize{%
% customize based on the file name structure
cv% <---- change the characters before %
}}
\expandafter\def\expandafter\revision@get\revision@prefix#1\@nil{#1}
\edef\revision{\expandafter\revision@get\jobname\@nil}
\makeatother
\begin{document}
This document is Rev~\revision.
\end{document}
由于产生的字符\jobname
有类别代码 12,因此必须进行去标记化。
答案2
不太优雅:
\documentclass[10pt]{article}
\def\stripfirst#1#2{#2}
\edef\filerev{\expandafter\stripfirst\jobname}%remove c
\edef\filerev{Rev \expandafter\stripfirst\filerev}%remove v
\begin{document}
\filerev
\end{document}