与“combine”包一起使用的“hyperref”和“biblatex”

与“combine”包一起使用的“hyperref”和“biblatex”

我很难让软件包与和combine配合使用。我的简单示例:biblatexhyperref

合并文档 (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正确写入,但这对使用正确的参考书目进行排版没有帮助。我还尝试“修补”它,以便它不会将输出重定向到子文件,但我遇到了更多问题。combinemain.tex\jobnamesubfilemain.auxsubfile.auxmain.bcfsubfile.bcfmain.bcfsubfile.bcfsubfile.bcfmain.texcombine

最后,我决定\import完全放弃,转而使用\inputfromdocmute包(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}
% ----------------------------------------------------------------

相关内容