在 Linux/Debian/Sid 上,在任何git
存储库内,以下管道提供一些 git 提交 id:
git log --format=oneline -1 --abbrev=16 --abbrev-commit -q | cut -d' ' -f1
例如,在一个目录中,它输出03aa650c1bbd20c3
。我想在我的LuaLaTeX文档中显示该字符串。
但是,对于以下lx.tex
文件:
% file lx.tex
\documentclass[11pt,a4paper]{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
pip=io.popen("git log --format=oneline -1 --abbrev=16 --abbrev-commit -q | cut -d' ' -f1")
gitid=pip:read("l")
pip:close()
\end{luacode*}
\newcommand{\mygitid}{\luadirect{tex.print(gitid)}}
The gitid is \mygitid
\end{document}
我处理时lualatex --shell-escape --file-line-error --halt-on-error lx
出现错误
% lualatex --shell-escape --file-line-error --halt-on-error lx
This is LuaTeX, Version 1.07.0 (TeX Live 2019/dev/Debian)
system commands enabled.
(./lx.tex
LaTeX2e <2018-04-01> patch level 5
luaotfload | main : initialization completed in 0.594 seconds (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo))
(/usr/share/texlive/texmf-dist/tex/lualatex/luacode/luacode.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty)
(/usr/share/texlive/texmf-dist/tex/luatex/luatexbase/luatexbase.sty
(/usr/share/texlive/texmf-dist/tex/luatex/ctablestack/ctablestack.sty)))
(./lx.aux)[\directlua]:2: bad argument #1 to 'read' (invalid option)
stack traceback:
[C]: in function 'read'
[\directlua]:2: in main chunk.
\luacode@dbg@exec ...code@maybe@printdbg {#1} #1 }
l.8 \end{luacode*}
350 words of node memory still in use:
1 hlist, 1 rule, 1 dir, 3 kern, 1 glyph, 3 attribute, 45 glue_spec, 3 attrib
ute_list, 1 write nodes
avail lists: 2:8,3:1,4:1,5:4,7:2,8:1,9:3
./lx.tex:8: ==> Fatal error occurred, no output PDF file produced!
Transcript written on lx.log.
但如果我lua5.3
在终端中运行以下代码
% lua5.3
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
>
> pip=io.popen("git log --format=oneline -1 --abbrev=16 --abbrev-commit -q | cut -d' ' -f1")
> gitid=pip:read("l")
> pip:close()
true exit 0
> gitid
03aa650c1bbd20c3
> type(gitid)
string
它按我预期的那样工作。
我究竟做错了什么?
答案1
LuaTeX 1.07.0 版默认使用 Lua 5.2,在 Lua 5.2 中必须使用read'*l'
而不是read'l'
。(为了兼容,read'*l'
仍可与 Lua 5.3 配合使用)
因此,您可以将其添加*
到参数中,或者如果已安装,read
则切换到(带有 Lua 5.3 的 LuaTex)。luatex53
对于:read
,参数l
或是*l
默认值,因此另一个选项是不传递任何参数:(另外我添加了local
以避免全局变量pip
和--no-color
因为例如在我的系统上git log
输出颜色转义序列)
% file lx.tex
\documentclass[11pt,a4paper]{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
local pip=io.popen("git log --no-color --format=oneline -1 --abbrev=16 --abbrev-commit -q | cut -d' ' -f1")
gitid=pip:read()
pip:close()
\end{luacode*}
\newcommand{\mygitid}{\luadirect{tex.print(gitid)}}
The gitid is \mygitid
\end{document}