我很难让软件包与和combine
配合使用。我的简单示例:biblatex
hyperref
合并文档 (article-1.tex) 中需要包含的一些文章:
\documentclass[a5paper,twocolumn]{article}
\input{common}
\title{Some Title}
\date{}
\author[1]{Some Author}
\author[2]{Another Author}
\affil[1]{Some where}
\affil[2]{Else}
\begin{document}
\maketitle
This is some text, even citing some publicaton: \cite{patrick2011}.
\printbibliography
\end{document}
我的 common.tex 仅包含一些应该在每篇文章中可用的宏:
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{gensymb}
\usepackage[backend=biber]{biblatex}
\usepackage{authblk}
\usepackage[german]{babel}
\usepackage[top=1.5cm,bottom=1.5cm,left=1.2cm,right=1.2cm]{geometry}
\usepackage{hyperref}
\addbibresource{cham-literature.bib}
\providecommand*{\taxon}[1]{\textit{#1}}
\providecommand*{\centigrade}[1]{$#1^\circ\textrm{C}$}
\providecommand*{\kelvin}[1]{$#1\textrm{K}$}
\providecommand*{\person}[1]{\textsc{#1}}
cham-literature.bib 文件:
@article{patrick2011,
author = "David A. Patrick AND Philip Shirk AND James R. Vonesh AND Elizabeth B. Harper AND Kim M. Howell",
title = "Abundance and Roosting Ecology of Chameleons in the East Usambara Mountains of Tanzania and the Potential Effects of Harvesting",
journal = "Herpetological Conservation \& Biology",
year = "2011",
volume = "6",
number = "3",
pages = "422--431"
}
最后是合并文档(仅来源于上面提到的一篇文章)
\documentclass{combine}
\input{common}
\title{Journal 2016-1}
\author{Jan-Benedict Glaw (Hrsg.)}
\date{31. Februar 2016}
\begin{document}
\pagestyle{combine}
\maketitle
\tableofcontents
\clearpage
\begin{papers}
\coltoctitle{Title 1}
\coltocauthor{Author 1}
\import{article-1}
\end{papers}
\end{document}
当我删除所有 biblatex 和 hyperref 内容时,效果很好,但这不是我想要的。现在,结果是:
! Undefined control sequence.
\@begindocumenthook ...\undef \blx@dopreamblecmds
\let \do \noexpand \expand...
l.11 \begin{document}
如能得到任何帮助我将十分感激!
答案1
最后,我无法让“组合”真正处理比一些简单的文本段落更复杂的东西。
我的解决方案是让文章像往常一样独立,并且(除了所有其他内容之外)将其放在每个文章的中央 .tex 文件中 \input{}ed:
\usepackage{catchfile}
\newcommand{\getenv}[2][]{
\CatchFileEdef{\temp}{"|kpsewhich --var-value #2"}{}
\if\relax\detokenize{#1}\relax\temp\else\let#1\temp\fi
}
在每篇文章的序言中,我从环境变量中获取一些数据,即:
\getenv[\STARTPAGENUMBER]{STARTPAGENUMBER}
\getenv[\PUBLISHEDINIFO]{PUBLISHEDINIFO}
稍后用于在每篇文章的第一页打印出版信息(年份、期刊、页码范围)以及调整起始页码:
\begin{document}
\IfInteger{\STARTPAGENUMBER}{
\setcounter{page}{\STARTPAGENUMBER}
}{}
\maketitle
\begin{tikzpicture}[remember picture, overlay]
\node [anchor=north, yshift=-0.8cm] at (current page.north)
{\PUBLISHEDINIFO};
\end{tikzpicture}
另一个包装 LaTeX 文件准备包含封面、目录等,并提取所有单独的文章:
\phantomsection
\addcontentsline{toc}{section}{Article Title}
\includepdf[pages=-]{articles/foo}%.pdf
\clearpage
(实际上,它是一个中央公共 .tex 文件 \input{}ing 生成的 .tex 文件,其中包含编辑文本、正面图片、背面图片、文章等。所有这些输入文件都是通过环境变量给出的,所以这是一个适合我并且易于编写脚本的解决方案。)
答案2
当我尝试使用 生成会议论文集时combine
,我遇到了同样的问题,每篇文章都可以使用biblatex
。我的解决方案如下。此外,我需要为某些文章保留使用内置thebibliography
环境的选项。虽然我不必使用hyperref
,但我确信这个解决方案也适用于它。
一些歌词题外话
中给出的类\import {subfile}
命令的问题在于它将宏重新定义为。此外,它将 AUX 文件输出从重定向到。这对于标签和引用对于每个子文件都是本地的来说是必需的。这还会导致将输出从(biblatex 辅助文件)重定向到。这与 biber 不兼容,因为它尝试读取(部分生成)以及。我可以设法让 biblatex正确写入,但这对使用正确的参考书目进行排版没有帮助。我还尝试“修补”它,以便它不会将输出重定向到子文件,但我遇到了更多问题。combine
main.tex
\jobname
subfile
main.aux
subfile.aux
main.bcf
subfile.bcf
main.bcf
subfile.bcf
subfile.bcf
main.tex
combine
最后,我决定\import
完全放弃,转而使用\input
fromdocmute
包(from 包的相同功能newclude
似乎已经很久没有用了)。我仍然用combine
它来排版带有文章标题和作者的目录。
解决方案
文章数据存储在newpapers.csv
以下结构的文件中:
<authors to appear in TOC>;<relative path>;<TEX file name>;<BIB file name>
...
该目录结构应该与 EasyChair 生成的会议记录卷档案类似。
\documentclass %
[ %
% Options...
] %
{combine}
% Loading other packages...
\usepackage [nomauthor] {combinet} % table of contents
\usepackage {datatool} % to read the list of articles from an external file
\usepackage {docmute} % \input command that reads only document environment
\usepackage {titling} % to enable using \maketitle many times
\let \bibtexcite \cite % remembering the original \cite
\usepackage {csquotes}
\usepackage %
[ %
% Options...
] %
{biblatex}
\let \biblatexcite \cite
% Loading packages required for included articles...
% Reading biblatex bibliography resources:
\DTLsetseparator {;}
\DTLloaddb %
[ %
noheader, %
keys = {name,relpath,texfile,bibfile}, %
] %
{newpapers} %
{newpapers.csv}
\def \sominternalmacro {}
\begin {DTLenvforeach*} %
{newpapers} %
{\myname=name,\relpath=relpath,\texfile=texfile,\bibfile=bibfile} %
%
% Test whether \bibfile is empty
\ifx \sominternalmacro \bibfile \sominternalmacro
% Nothing
\else
\addbibresource %
{papers/00010\relpath/\bibfile.bib}
% EasyChair directory structure
\fi
%
\end {DTLenvforeach*}
% ----------------------------------------------------------------
\begin {document}
% ----------------------------------------------------------------
% Title page, foreword, etc....
\clearpage
\tableofcontents
\let \oldmaketitle \maketitle
% Used to disable adding sections from articles to the TOC
\let \oldaddcontentsline = \addcontentsline
\newcommand {\nocontentsline} [3] %
{}
\def \maketitle %
{%
\let \addcontentsline = \oldaddcontentsline
%
% Adding the title and authors to the TOC
%
\addtocontents %
{toc} %
{%
\protect \contentsline {coltoctitle}%
{\protect \numberline {}\thetitle} {\thecolpage}%
}%
%
\addcontentsline %
{toc} %
{coltocauthor} %
{\protect \numberline {}\myname}
%
\oldmaketitle
%
% Disabling adding sections from articles to the TOC
\let \addcontentsline = \nocontentsline
%
% Resetting section numbers for this article
\setcounter {section} {0}
\setcounter {subsection} {0}
\setcounter {figure} {0}
\setcounter {table} {0}
}%
% Looping over each article:
\begin {DTLenvforeach*} %
{newpapers} %
{\myname=name,\relpath=relpath,\texfile=texfile,\bibfile=bibfile} %
%
% Some custom definitions...
%
\clearpage
%
% If bibfile is empty,
\ifx \sominternalmacro \bibfile \sominternalmacro
% use the usual LaTeX \cite
\let \cite \bibtexcite
\else
% otherwise, use biblatex \cite
\let \cite \biblatexcite
%
% Start a new biblatex reference section with local references
\newrefsection %
[papers/00010\relpath/\bibfile.bib]
\fi
%
% Input the article TEX file
\input {papers/00010\relpath/\texfile}
%
% Other settings...
%
\end {DTLenvforeach*}
% ----------------------------------------------------------------
\end {document}
% ----------------------------------------------------------------