如何在每一页的顶部显示文本文件中表格的列名?

如何在每一页的顶部显示文本文件中表格的列名?

我有一个存储在文本文件中的表格。我想将该表格插入 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}

在此处输入图片描述

相关内容