我正在尝试为学生创建一个简单的模板,以便他们创建一页摘要。这个想法是,他们只需定义标题、作者和摘要,另一个文件实际上可以包含使用它们的主要代码。例如:
\title{A Very Simple \LaTeXe{} Template}
\author{author1 \and author2}
\abstract{
Long, drawn out abstract, blah, blah, blah.
}
\captionedimage {myimage.pdf}{caption text}
\captionedimage {myimage2.pdf}{caption text2}
第二个文件是主文档,包括第一个文件。虽然我从来没有做过这样的事情,但显然如果我想要一种新风格,那么要做的就是为我想要的新风格编写一个新的 .sty 和 .cls 文件。假设主文档可能看起来像这样(我使用 C 预处理器包含来说明我要做什么)
#include "individualpage.tex"
\documentclass[12pt]{simpleabstract}
\begin{document}
\maketitle %% Insert a bold title font at the top of the page
%% insert the abstract defined by the student here
%% if there is an image, insert it here
\end{document}
第一个问题是,是否已经存在类似的东西,因为我不想重新发明轮子。我搜索了摘要模板,但甚至没有找到我想要的页面的简单示例,更不用说允许我生成此页面,然后交替地将它们组合在一起的设置了。这是可行的,但我知道我可以改变文档类以使页面看起来像我想要的那样。但是,在尝试之前,我想知道是否已经存在可以执行此操作的东西。以下是我希望一页看起来像的样子:
第二个问题是如何自动提取其中的 200 份并创建一个文档。这可能需要不同的文档样式,该样式包含标题页、一些介绍性文字、从每个摘要的标题中选择的目录以及摘要页面。主要出于这个原因,我宁愿不让个别学生嵌入定义文档的 latex 代码,而是将其放在单独的文件中。如果他们将文档样式嵌入页面中,那么为了构建更大的文档,我必须将其包装在更大的文档中。
我曾尝试说明我想使用 C++ 预处理器将文件连接在一起来实现什么,当然,实现这一点的一种方法是使用 perl 或其他文本处理语言以某种方式处理这些文件。但也许是我对 LaTeX 的无知,我不知道已经存在这样的工具,因此我提出了这个问题:是否有某种标准化的方法来实现这一点,还是需要我进行自定义编程?
答案1
以下是基于@Ignasi 建议的答案框架。combine
软件包的文档(http://tug.ctan.org/tex-archive/macros/latex/contrib/combine/combine.pdf) 将帮助您进行格式化、使目录正常工作,甚至生成索引和图表。
学生获得两个文件preamble.tex
(如果可能则只读)和template.tex
。她填写模板、编译它并以新名称连同她的图像文件一起提交(您必须建立命名约定)。
序言:
% preamble.tex
% provided to students, read only
\documentclass[12pt,notitlepage]{article}
\usepackage{graphicx}
\newcommand{\theschool}{to be renewed}
\newcommand{\school}[1]{%
\renewcommand{\theschool}{#1}
}
\newcommand{\theteacher}{to be renewed}
\newcommand{\teacher}[1]{%
\renewcommand{\theteacher}{#1}
}
% hack the \date field of \maketitle
\date{School: \theschool{} -- Teacher: \theteacher{}}
\newcommand{\myfigure}[2]{%
\centering
\includegraphics[height=3cm]{#1}\\
Caption: #2
}
\begin{document}
\newcommand{\alldone}{\end{document}}
template.tex
,保存为plato.tex
:
% template for students to fill in
%
\input{preamble}
\author{Plato}
\title{The Republic}
\school{Athens}
\teacher{Socrates}
\maketitle
\begin{abstract}
\emph{The Republic} in one short paragraph \ldots
\end{abstract}
% first argument is image (.jpg, .png, .pdf)
% second argument is figure caption
\myfigure{therepublic}{Image from wikipedia}
\alldone
编译为
包装器位于putittogether.tex
包含学生提交内容和空的目录中preamble.tex
。我使用第二个保存的模板对其进行了编译和测试 - 此处未包含代码。
% putittogether.tex
\documentclass[12pt]{combine}
% macros from the preamble seen by the students
\usepackage{graphicx}
\newcommand{\theschool}{to be renewed}
\newcommand{\school}[1]{%
\renewcommand{\theschool}{#1}
}
\newcommand{\theteacher}{to be renewed}
\newcommand{\teacher}[1]{%
\renewcommand{\theteacher}{#1}
}
\newcommand{\hackdate}{%
\date{School: \theschool{} -- Teacher: \theteacher{}}
}
\newcommand{\myfigure}[2]{%
\centering
\includegraphics[height=3cm]{#1}\\
Caption: #2
}
% The \date must be renewed between \imports
\newcommand{\goget}[1]{%
\hackdate{}\import{#1}
}
\newcommand{\alldone}{} % do nothing
% Combine package configuration
\title{All Together Now}
\author{many authors}
\date{\today}
\begin{document}
\pagestyle{combine} % use the combine page style
\maketitle % main title
\tableofcontents % main ToC
\clearpage
% The files to glue together - all in this directory,
% along with all graphics files required.
%
% Generate this list with a script, then \include it here.
\goget{plato}
\goget{vonneumann}
\end{document}