如何使用来计算文件的行数latex3
?
\begin{filecontents*}{\jobname.dat}
Line first
Line second
...
Line last
\end{filecontents*}
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
% variables
% user level commands
\NewDocumentCommand{\nlines}{ m }
{
% some code
}
\ExplSyntaxOff
\begin{document}
\nlines{\jobname.dat} % print integer value = number of lines in \jobname.dat
\end{document}
答案1
您可以使用(实验性的)文件读取循环
\begin{filecontents*}{\jobname.dat}
Line first
Line second
...
Line last
\end{filecontents*}
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
% variables
\ior_new:N \g__sergiokapone_count_ior
\int_new:N \l__sergiokapone_count_int
% user level commands
\NewDocumentCommand{\nlines}{ m }
{
\ior_open:Nn \g__sergiokapone_count_ior {#1}
\int_zero:N \l__sergiokapone_count_int
\ior_map_inline:Nn \g__sergiokapone_count_ior
{ \int_incr:N \l__sergiokapone_count_int }
\int_use:N \l__sergiokapone_count_int
}
\ExplSyntaxOff
\begin{document}
\nlines{\jobname.dat}
\end{document}
请注意,文件在这里有四行:文件末尾有一个空白行。人们可能会注意到这样的行...
答案2
使用 LuaTeX 可以轻松实现这一点,因为 Lua 带有文件迭代器。额外好处:它完全可扩展。
\begin{filecontents*}{\jobname.dat}
Line first
Line second
...
Line last
\end{filecontents*}
\documentclass{article}
\newcommand\nlines[1]{%
\directlua{
local ctr = 0
for _ in io.lines([[#1]]) do
ctr = ctr + 1
end
tex.sprint(ctr)
}%
}
\begin{document}
\edef\x{\nlines{\jobname.dat}} \x
\end{document}