如何在Latex文档中输入独立的内容?

如何在Latex文档中输入独立的内容?

我有一份类似的文件:

\documentclass{article} 
  \begin{document}
    \begin{itemize}
      \item First
      \item Second
      \item Third
    \end{itemize}
  \end{document}

我想用不同的值填充它\item。也就是说,生成不同的文档,具有相同的布局,但不同的项目。

这些项目可以从文本文件中加载,文本文件可以采用任何易于阅读的形式,例如:

 #1#First item
 #2#Second item

或者其他一些简单的标记。如何在 Latex 文档中设置某种变量,以便从其他文件导入项目?

答案1

问题对于要加载的内容有点模糊。

我假设了一个文件名foocontent.txt和一个.tex名为的文件foo.tex,编译是这样完成的

pdflatex "\def\filetoload{foocontent.txt}\input{foo}"

在命令行上(或在这些编辑器的命令行框中)

代码将加载文件并使用功能逐行读取其内容expl3并将其存储到稍后在内部\seq显示的变量中。\displayfilecontent\begin{itemize}...\end{itemize}

按照“定义”,每个条目\item必须出现在单独的行上,并且可以是“任何” LaTeX 内容。

这是我为许多学生等生成列表的“快速”方法。

\documentclass{article}

\usepackage{xcolor}
\usepackage{xparse}

\ExplSyntaxOn
\ior_new:N \l_local_file_handle
\seq_new:N \g_local_content_seq
\cs_new:Nn \store_content_to_seq:n {%
  \seq_gput_right:Nn \g_local_content_seq {#1}
}

\NewDocumentCommand{\readfromfile}{m}{
  \ior_open:Nn \l_local_file_handle {#1}
  \ior_map_inline:Nn \l_local_file_handle {\store_content_to_seq:n{##1} }
  \ior_close:N \l_local_file_handle
}

\NewDocumentCommand{\displayfilecontent}{}{%
  \seq_map_inline:Nn \g_local_content_seq { \item ##1 }
}
\ExplSyntaxOff

\begin{document}

\readfromfile{\filetoload}

\begin{itemize}
\displayfilecontent
\end{itemize}
\end{document}

这是foocontent.txt

And
Now
For
Something
Completely
Different
And 
Totally
\textcolor{blue}{Strange}
Things

在此处输入图片描述

答案2

以下示例使用datatool读入包含两列(无标题)的 CSV 文件,格式如下:

1,First item
2,Second item
3,Third item

使用默认环境\item或使用第一列条目(\fixedenumerate)来设置项目:

在此处输入图片描述

\documentclass{article} 

\usepackage{filecontents,datatool}
\begin{filecontents*}{mylist.csv}
1,First item
2,Second item
3,Third item
\end{filecontents*}

\newif\ifdefaultenumerate
\newcommand{\defaultenumerate}{\defaultenumeratetrue}
\newcommand{\fixedenumerate}{\defaultenumeratefalse}

\newcommand{\processCSV}[1]{%
  \DTLifdbexists{CSVinput}{\DTLgdeletedb{CSVinput}}{}%
  \DTLloaddb[noheader,keys={Number,Text}]{CSVinput}{#1}%
  \DTLforeach{CSVinput}{\Number=Number,\Text=Text}{%
    \ifdefaultenumerate
      \item
    \else
      \item[\Number]
    \fi
    \Text
  }
}

\begin{document}

\begin{itemize}
  \item First
  \item Second
  \item Third
\end{itemize}

\begin{itemize}
  \processCSV{mylist.csv}
\end{itemize}

\begin{enumerate}
  \processCSV{mylist.csv}
\end{enumerate}

\defaultenumerate
\begin{enumerate}
  \processCSV{mylist.csv}
\end{enumerate}

\end{document}

相关内容