![ifthen 条件对于 gitinfo2 元数据失败](https://linux22.com/image/370771/ifthen%20%E6%9D%A1%E4%BB%B6%E5%AF%B9%E4%BA%8E%20gitinfo2%20%E5%85%83%E6%95%B0%E6%8D%AE%E5%A4%B1%E8%B4%A5.png)
我正在使用来自 TeXLive 2017 的gitinfo2
包 (2.0.7) 和ifthen
包 (v1.1c),以便在我的文档中包含 Git 元数据:
\documentclass{article}
\usepackage[local]{gitinfo2}
\usepackage{ifthen}
\begin{document}
commit \gitAbbrevHash
\ifthenelse{\equal{\gitBranch}{master}}{}{ on branch \gitBranch}%
\ifthenelse{\equal{\gitDirty}{}}{}{ with local changes}
\end{document}
目的是打印分支的名称,但前提是它不是主分支。因此,对于该示例,我仅期望“提交 e78b91e”。但是,结果是“在分支 master 上提交 e78b91e”。
换句话说, 的测试结果\gitBranch
始终为 false(而 的测试结果\gitDirty
正确)。我遗漏了什么?
以下是该文件的内容gitHeadLocal.gin
:
\usepackage[%
shash={e78b91e},
lhash={e78b91e0e8582d75273ad4f04bda5ae3c52055bd},
authname={Abcd Efgh},
authemail={[email protected]},
authsdate={2018-02-19},
authidate={2018-02-19 20:00:05 +0100},
authudate={1519066805},
commname={Abcd Efgh},
commemail={[email protected]},
commsdate={2018-02-19},
commidate={2018-02-19 20:02:01 +0100},
commudate={1519066921},
refnames={ (HEAD -> master)},
firsttagdescribe={e78b91e},
reltag={e78b91e}
]{gitexinfo}
答案1
如果包设置
\gitBranch=\long macro: ->\detokenize \expandafter {\bcut }
然后,您会遇到与尝试测试当前文件名时发生的相同问题,因为\jobname
字符都是 catcode 12(如标点符号)而不是 catcode 11(字母),但是您可以使用相同的\detokenize
e-tex 原语来获取 catcode 12 测试字符串,\detokenize{master}
而不是进行测试master
。