解析文件名并从名称中提取修订版本

解析文件名并从名称中提取修订版本

我的文件名为“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}

相关内容