使用 Lua 在文件中写入/读取 LaTeX 命令(如 \title、\ author 等)的值

使用 Lua 在文件中写入/读取 LaTeX 命令(如 \title、\ author 等)的值

这个问题与我的其他问题相关这里。我找到了一个解决方案,pdfpages感谢TX.SX

\documentclass[]{scrbook}
\usepackage{authblk}
\usepackage{pdfpages}
\newcommand{\insertpaper}[4]%
           { % Syntax: \insertmydocument{Toc level}{Title}{Subtitle}{File}
             % Requires: tocloft hyperref pdfpages
             \newpage
             \phantomsection
             \cftaddtitleline{toc}{#1}{#2}{\thepage}
             \cftchapterprecistoc{#3}
            \includepdf[pages=-, pagecommand={\pagestyle{plain}}]{#4}
           }
\begin{document}
\tableofcontents
\insertpaper{chapter}{Title o the 1st paper}{A.U. Thor11, A.U. Thor12}{paper1.pdf}
\insertpaper{chapter}{Title o the 2nd paper}{A.U. Thor21, A.U. Thor22}{paper2.pdf}
\end{document}

对于制作会议论文集,我使用pdfpages,如示例中所示LuaLaTeX。宏\insertpaper在目录中添加了论文的标题和作者。但为此,我手动编写了 PDF 中所需的字段(例如标题和作者)。我的论文(PDFs)也是通过LuaLaTeX使用scrartcl类和用于创建和authblk的包创建的。现在我的想法不是手动填写相应的字段,而是从文件中读取它们。也就是说,之前应该将所需的字段写入适当的文件。authoraffiliationspaper.tex

\insertpaper如果只有一个参数filename并且从相应的信息文件中读取有关所需字段的信息,那就太好了。

因此,我需要一些帮助来创建此类程序Lua(可取的)或LaTeX3其他东西。

我找到了一些关于如何读取数据的解决方案

\documentclass{scrartcl}
\usepackage{luatextra}
\usepackage{filecontents}

\begin{filecontents}{testdata.dat}
Title of the page
A.U. Thor1
A.U. Thor2
\end{filecontents}

\begin{luacode}
  function readtxt()
    file = io.open("testdata.dat", "r")
    for line in file:lines() do

      tex.print(line.."\\\\")
    end
  end
\end{luacode}

\begin{document}
  \directlua{readtxt()}
\end{document}

但我不知道如何将数据替换为所需的命令\insertpaper

答案1

如果你按照我的回答中给出的建议如何将文章的作者写入文件?,当你编译时,paper1.tex你将得到一个名为的文件paper1-titleauthors.dat,其中包含类似

\thispapertitle{Title of the article}
\thispaperauthor{First Author}
\thispaperauthor{Second Author}
\finishauthors

现在您可以使用数据了:

\documentclass[]{scrbook}
\usepackage{authblk,tocloft}
\usepackage{pdfpages}
\usepackage{hyperref}
\newcommand{\insertpaper}[1]%
  {% #1 is the file name (without extension)
   \clearpage
   \renewcommand\papertitle{}% reinitialize
   \renewcommand\paperauthors{}% reinitialize
   \input{#1-titleauthors.dat}%
   \phantomsection
   \cftaddtitleline{toc}{chapter}{\papertitle\ --- \paperauthors}{\thepage}%
   \includepdf[pages=-, pagecommand={\pagestyle{plain}}]{#1}%
}
\newcommand\papertitle{}% initialize
\newcommand\paperauthors{}% initialize
\newcommand{\thispapertitle}[1]{\renewcommand\papertitle{#1}}
\makeatletter
\newcommand{\thispaperauthor}[2]{%
    \g@addto@macro\paperauthors{#1}%
  \ifx#2\finishauthors
    % no more authors
  \else
    \g@addto@macro\paperauthors{, }%
    \expandafter\thispaperauthor % reinsert the swallowed token
  \fi
}
\makeatother

\begin{document}
\tableofcontents
\insertpaper{paper1}
\end{document}

这是您将获得的目录页;当然可以定义目录行的不同格式。

在此处输入图片描述

相关内容