gitinfo(xstring):由于版本号前面有“tag:”,标签信息不起作用

gitinfo(xstring):由于版本号前面有“tag:”,标签信息不起作用

我正在从 subversion 切换到 git,我对这个gitinfo包很满意。我唯一无法正常工作的就是显示标签中的版本号。

我已经确定了问题所在:标记提交时,参考元数据显示“标记:0.1”。在 Brent 的示例文件中,它仅显示为“0.1” - 后者有效,前者无效,请参阅下面的 MWE。

我对 git 的操作是否出了问题,或者这是软件包的(可修复的?)限制。如果相关的话,我在 Windows 上使用 git 1.9.0。

\documentclass{article}

\usepackage{gitinfo}

\usepackage{filecontents}

\begin{filecontents}{gitHeadInfo.gin}
\usepackage[%
        refnames={ (HEAD, tag: 1.0, master)}
    ]{gitsetinfo}
\end{filecontents}

\begin{document}

\gitVtags
\gitVtag
\gitVtagn

\end{document}

编辑:Vtag命令的定义是:

\newcommand{\git@vtag}[1]{%
    \def\do##1{%
        \IfDecimal{##1}{%
            \renewcommand{\gitVtag}{##1}
            \renewcommand{\gitVtags}{\space##1}
            \renewcommand{\gitVtagn}{\space##1}
            \listbreak
        }{}%
    }%
    \expandafter\docsvlist\expandafter{#1}%
}%

答案1

我们需要一个替代的 git-set-info 例程:

\documentclass{article}

\usepackage{gitinfo}

\usepackage{filecontents}

\begin{filecontents}{gitHeadInfo.gin}
\usepackage[%
        refnames={ (HEAD, tag: 1.0, master)}
     ]{mygitsetinfo}% call the new routine here
\end{filecontents}

\begin{document}

\gitVtags
\gitVtag
\gitVtagn

\end{document}

\IfDecimal如果有小数,则该例程需要输入小数。如果我们有tag: 1.0而不是1.0,我们需要删除第一个。用于提供的功能tag:还提供可以执行此操作的命令。允许您在某个字符处剪切字符串并将两部分保存在两个宏中。我使用了和来保存这些字符串,尽管我们实际上只对右侧部分感兴趣。xstringgitinfo\IfDecimal\StrCut\lcut\rcut

为了同时允许tag: 1.01.0,我使用了嵌套条件。首先,我剪切字符串并保存两个部分。然后我测试是否\rcut为小数。如果是,则使用该结果。如果不是,看看未剪切的参数本身是否为小数。如果是,则使用它。如果不是,则不返回任何内容。

将以下内容保存为mygetsetinfo.sty

% mygitsetinfo.sty
% Code from gitsetinfo.sty copyright 2011 Brent Longborough (see below).
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% The file mygitsetinfo.sty is a derived work under the terms of the
% LPPL. It is based on version 1.0 of gitsetinfo.sty, available as part
% of the gitinfo package available from http://ctan.org/pkg/gitinfo.
%
% -----------------------------------------------------
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mygitsetinfo}[2014/04/09 v0.01 Auxiliary package for gitinfo]
\RequirePackage{kvoptions}
\RequirePackage{xstring}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{%
    family=gitinfo,
    prefix=gitInf@
    }
\DeclareStringOption{shash}
\DeclareStringOption{lhash}
\DeclareStringOption{authname}
\DeclareStringOption{authemail}
\DeclareStringOption{authsdate}
\DeclareStringOption{authidate}
\DeclareStringOption{authudate}
\DeclareStringOption{commname}
\DeclareStringOption{commemail}
\DeclareStringOption{commsdate}
\DeclareStringOption{commidate}
\DeclareStringOption{commudate}
\DeclareStringOption{refnames}
\ProcessKeyvalOptions*
\renewcommand{\gitAbbrevHash}{\gitInf@shash}
\renewcommand{\gitHash}{\gitInf@lhash}
\renewcommand{\gitAuthorName}{\gitInf@authname}
\renewcommand{\gitAuthorEmail}{\gitInf@authemail}
\renewcommand{\gitAuthorDate}{\gitInf@authsdate}
\renewcommand{\gitAuthorIsoDate}{\gitInf@authidate}
\renewcommand{\gitAuthorUnixDate}{\gitInf@authudate}
\renewcommand{\gitCommitterName}{\gitInf@commname}
\renewcommand{\gitCommitterEmail}{\gitInf@commemail}
\renewcommand{\gitCommitterDate}{\gitInf@commsdate}
\renewcommand{\gitCommitterIsoDate}{\gitInf@commidate}
\renewcommand{\gitCommitterUnixDate}{\gitInf@commudate}
\renewcommand{\gitReferences}{\gitInf@refnames}
\newcommand{\git@vtag}[1]{%
    \def\do##1{%
      \StrCut{##1}{: }\lcut\rcut%
      \IfDecimal\rcut{% case where we have string: decimal e.g. tag: 1.0
        \renewcommand{\gitVtag}{\rcut}
        \renewcommand{\gitVtags}{\space\rcut}
        \renewcommand{\gitVtagn}{\space\rcut}
        \listbreak
      }{%
        \IfDecimal{##1}{% case where we have decimal e.g. 1.0
          \renewcommand{\gitVtag}{##1}
          \renewcommand{\gitVtags}{\space##1}
          \renewcommand{\gitVtagn}{\space##1}
          \listbreak
        }{}%
      }%
    }%
    \expandafter\docsvlist\expandafter{#1}%
}%
\git@vtag{\gitInf@refnames}

结果看起来并不十分令人印象深刻,但我相信它比‘(无)’有所改进......

结果看起来并不令人印象深刻...

这也适用于原文所涵盖的情况gitsetinfo

\documentclass{article}

\usepackage{gitinfo}

\usepackage{filecontents}

\begin{filecontents}{gitHeadInfo.gin}
\usepackage[%
        refnames={ (HEAD, 1.0, master)}
     ]{mygitsetinfo}% call the new routine here
\end{filecontents}

\begin{document}

\gitVtags
\gitVtag
\gitVtagn

\end{document}

看起来相同的结果...

相关内容