我有一个存储在文本文件中的表格。我想将该表格插入 LaTeX 中,并让列名显示在每页的顶部。
我尝试了下面的代码,但是不起作用。有人能给我一些建议吗?
\usepackage{fancyvrb}
\begin{center}
\begin{longtable}{cccc}
1.id 2.Name 3.Age 4.gender\\[0.2cm]
\hline
\endhead % all the lines above this will be repeated on every page
\VerbatimInput[baselinestretch=1,fontsize=\\footnotesize]{myfile.txt}
\end{longtable}
\end{center}
myfile.txt
是一个包含数百行的 4 列表。例如
id name Age gender
32432 Angela Cheung 34 F
23245 Katherine Zhang 25 F
254535 Tim Clark 42 M
2523 Richard Davis 44 M
435 Ed Pitt 23 M
答案1
这是使用 LuaLaTeX 的方法。在函数中,readDataFile
文件的内容存储在 Lua 表中,该表使用函数打印printTable
。问题是如何分别分隔外部文件中的列条目以及如何在 Lua 函数中拆分字符串。在此示例中,我使用空格作为分隔符。因此,我在两个单独的参数中获得了名称,它们在 LaTeX 表中连接(我在文本文件中添加了一个列名)。我认为根据您的需要修改(简单)代码应该没有问题。
\documentclass{book}
\usepackage{longtable}
\usepackage{filecontents}
%create a datafile
\begin{filecontents*}{myfile.txt}
ID Name LastName Age Gender
32432 Angela Cheung 34 F
23245 Katherine Zhang 25 F
254535 Tim Clark 42 M
2523 Richard Davis 44 M
435 Ed Pitt 23 M
\end{filecontents*}
%create a lua script file
\begin{filecontents*}{luaFunctions.lua}
function readDataFile()
local input = io.open('myfile.txt', 'r')
peopleTable = {} --global table for storing the read values
for line in input:lines() do
--split the line with the delimiter
local split = string.explode(line, " ")
--save the arguments in variables
tableItem = {}
tableItem.Id = split[1]
tableItem.FirstName = split[2]
tableItem.LastName = split[3]
tableItem.Age = split[4]
tableItem.Gender = split[5]
--insert the arguments of one line in the table
table.insert(peopleTable, tableItem)
end
input:close()
end
function printTable()
tex.print(string.format("\\begin{longtable}{rlcc}"))
header = peopleTable[1] -- table header is stored in the first row
tex.print(string.format(" {%s} & {%s} & {%s} & {%s}\\\\\\hline"
,header.Id, header.FirstName, header.Age, header.Gender))
tex.print(string.format("\\endhead"))
--create a latex string for every table entry (except the header)
for i,p in ipairs(peopleTable) do
if i~=1 then
tex.print(string.format(" {%s} & {%s} ".." ".." {%s} & {%s} & {%s}\\\\"
,p.Id, p.FirstName, p.LastName, p.Age, p.Gender))
end
end
tex.print(string.format("\\end{longtable}"))
end
\end{filecontents*}
% read the external lua file to declare the defined functions,
% but without execute the Lua commands and functions
\directlua{dofile("luaFunctions.lua")}
% latex commands to execute the lua functions
\def\readDataFile{\directlua{readDataFile()}}
\def\printTable{\directlua{printTable()}}
\begin{document}
\readDataFile
\printTable
\end{document}