目录中参考文献的页码错误(scrreprt)

目录中参考文献的页码错误(scrreprt)

目录中有一个页码问题:biblatex 生成的“参考文献”页码。我总是使用该命令\addcontentsline{toc}{chapter}{title}将内容添加到目录中,在所有其他情况下,它都运行良好(表格列表等)。

问题描述:目录中的页码始终是参考文献的最后一页。这意味着,如果参考文献从第 80 页到第 84 页,则目录中将使用第 84 页(而不是参考文献开始的第 80 页)。

编辑:KOMA 脚本提供了bibliography=totoc解决该问题的方法。但是,如果有人能解释为什么它\addcontentsline{toc}{chapter}{title}适用于其他列表,但不适用于图书馆,我将不胜感激。

我无法提供我的 lib 文件(在代码中名为 Lib1),但您可以简单地导入一个几页长的文件来查看问题。

这是我的序言。由于我不知道原因是什么,我保留了这些论坛的有用用户生成的大部分定义和宏。我只删除了那些我确信无害的东西(例如表定义等)。附录是由@karlkoeller 制作的。但我不认为它们是问题所在,因为它们在参考书目之后开始。

谢谢你的帮助!

\documentclass[a4paper, 12pt, headsepline, headings=small, numbers=noendperiod]{scrreprt}
\usepackage{float}
\usepackage[onehalfspacing]{setspace}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mathptmx}
\usepackage[a4paper,showframe]{geometry}
\geometry{left=2cm,right=5cm,top=2cm,bottom=2cm,foot=1.5cm} 
\usepackage{csquotes}
\usepackage{environ}
\usepackage[backend=bibtex8,
    style=authoryear-icomp,
    dashed=false,
    autocite=footnote,
    maxcitenames=3,
    mincitenames=1,
    maxbibnames=100,
    firstinits=true,
    sorting=nyvt
    ]{biblatex}
\bibliography{Lib1}
\usepackage{chngcntr}
\counterwithout{figure}{chapter}
\counterwithout{table}{chapter} 
\counterwithout{equation}{chapter} 
\counterwithout{footnote}{chapter}  
\renewcommand{\floatpagefraction}{0.85} 
\renewcommand\bottomfraction{0.65} 
\setcounter{topnumber}{1} 



\newcommand\appendicesname{Appendix}
\newcommand\listofloaname{List of Appendices}
\newcommand*{\listofappendices}{\listoftoc{loa}}
\setuptoc{loa}{totoc}

\makeatletter
\g@addto@macro\appendix{%
\counterwithin{table}{chapter}
\renewcommand*{\tableformat}{\tablename~\thetable}
\let\oldaddcontentsline\addcontentsline
\newcommand\hackedaddcontentsline[3]{\oldaddcontentsline{loa}{#2}{#3}}
%
%\newcommand\hackedtableaddcontentsline[3]{\oldaddcontentsline{loa}{#2}{\tableformat}}
%
\newcommand\hackedtableaddcontentsline[3]{\oldaddcontentsline{loa}{#2}{#3}}
%
\let\oldpart\part
\renewcommand*\part[1]{%
\let\addcontentsline\hackedaddcontentsline%
\oldpart{#1}%
\let\addcontentsline\oldaddcontentsline%
}
\let\oldchapter\chapter
\renewcommand*\chapter[1]{%
\let\addcontentsline\hackedaddcontentsline%
\oldchapter{#1}%
\let\addcontentsline\oldaddcontentsline%
}
\let\oldsection\section
\renewcommand*\section[1]{%
\let\addcontentsline\hackedaddcontentsline%
\oldsection{#1}%
\let\addcontentsline\oldaddcontentsline%
}
\let\oldsubsection\subsection
\renewcommand*\subsection[1]{%
\let\addcontentsline\hackedaddcontentsline%
\oldsubsection{#1}%
\let\addcontentsline\oldaddcontentsline%
}
\let\oldsubsubsection\subsubsection
\renewcommand*\subsubsection[1]{%
\let\addcontentsline\hackedaddcontentsline%
\oldsubsubsection{#1}%
\let\addcontentsline\oldaddcontentsline%
}
\let\oldtable\table
\renewcommand*\table{%
\let\addcontentsline\hackedtableaddcontentsline%
\oldtable%
}
\let\oldendtable\endtable
\renewcommand*\endtable{%
\oldendtable%
\let\addcontentsline\oldaddcontentsline%
}
}
\makeatother

\newlength\myindention
\setlength\myindention{1em}
\let\oldcaption\caption
\renewcommand*\caption[2][]{%
\oldcaption[#1]{#1\\\hspace*{\myindention}#2}%
}


% Biblatex:


\DeclareNameAlias{sortname}{last-first}
\DeclareNameAlias{default}{last-first}

\DeclareFieldFormat{title}{#1}
\DeclareFieldFormat
  [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
  {title}{#1}
\DeclareFieldFormat{journaltitle}{#1}
\renewbibmacro*{cite:labelyear+extrayear}{%
\iffieldundef{labelyear}
  {}
  {\printtext[bibhyperref]{%
   \printtext[parens]{% 
   \printfield{labelyear}%
   \printfield{extrayear}}}}}

\renewbibmacro*{date+extrayear}{%
  \iffieldundef{\thefield{datelabelsource}year}
    {}
    {%\printtext[parens]{%
       \setunit{\addcomma\space}%
       \iffieldsequal{year}{\thefield{datelabelsource}year}
         {\printdateextralabel}%
         {\printfield{labelyear}%
          \printfield{extrayear}}}}%}%

\renewbibmacro*{publisher+location+date}{%
%
  \printlist{publisher}%
  \setunit*{\addcomma\space}%
  %\printlist{publisher}% 
  %\setunit*{\addperiod\space}% 
%
  \printlist{location}%
  \setunit*{\addcomma\space}
  \usebibmacro{date}%
  \newunit}

\renewbibmacro*{institution+location+date}{%
  \printlist{institution}%
  \setunit*{\addcomma\space}%
  \printlist{location}%
  \setunit*{\addcomma\space}
  \usebibmacro{date}%
  \newunit}
\renewbibmacro*{organization+location+date}{%
  \printlist{organization}%
  \setunit*{\addcomma\space}%
  \printlist{location}%
  \setunit*{\addcomma\space}
  \usebibmacro{date}%
  \newunit}

\renewbibmacro{in:}{%
    \ifentrytype{article}{}{\printtext{\bibstring{in}\intitlepunct}}}

\renewbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\addspace}%
  \printfield[parens]{number}%
  \setunit{\addcomma\space}%
  \printfield{eid}}


\begin{document}

\tableofcontents     
\listoftables 
\addcontentsline{toc}{chapter}{List of tables}


\nocite{*}
\printbibliography[title={References}]
\addcontentsline{toc}{chapter}{References}

\listofappendices
\begin{appendix}
\setlength{\abovecaptionskip}{-8pt}
\chapter{Appendix Chapter}
\end{appendix}

\end{document}

答案1

\printbibliography命令将打印整个参考书目,因此发出 \addeontentsline 当然会有最后一页的页码。

我假设参考书目将从新的右侧页面开始。因此,如果您发出命令\cleardoublepage,那么\addcontentsline,并且然后,目录中的条目\printbibliography应该带有正确的页码。如果文件是单面的,那么就\clearpage足够了。

(当然,你必须运行两次乳胶。)

编辑:有人问,如果需要为章节添加目录行,是否应\addcontentsline始终在之前添加\chapter。答案是,通常不需要。

在大多数文档类中,\chapter发出\clearpage(或\cleardoublepage)命令,因此如果该\addcontentsline行在 之前\chapter,页码就会低一个(或两个)。因此,如果您\chapter自己发出该命令,则该\addcontents行应紧跟在它之后。当然,这很少是必要的,除非您使用的文档类不会自动为 添加内容行\chapter(因为book不会为\chapter*)。

\printbibliography是一种特殊情况——该命令包括\chapter*但直接处理参考书目,而不留下“钩子”以允许作者说“我希望此章标题出现在目录中”。有一些软件包可以进行这种调整;这里采用的方法不使用单独的包。

答案2

Koma-Script 课程已经具备将标准材料添加至目录的功能。

如果你这样称呼班级

\documentclass[
  a4paper,
  12pt,
  headsepline,
  headings=small,
  numbers=noendperiod,
  listof=totoc
]{scrreprt}

您不需要任何。\addcontentsline对于\listoftables引用,请使用biblatex设施:

\printbibliography[title={References},heading=bibintoc]

请注意,Koma-Script 类有定义新浮点数的方法。如果您\usepackage{scrhack}在之前也加载float,则可以避免出现恼人的警告。


顺便问一下,将附录中的项目添加到附录列表中不是更容易吗?

\makeatletter
\g@addto@macro\appendix{%
  \counterwithin{table}{chapter}%
  \renewcommand*{\tableformat}{\tablename~\thetable}%
  \let\oldaddcontentsline\addcontentsline
  \renewcommand\addcontentsline[1]{\oldaddcontentsline{loa}}%
}
\makeatother

答案3

您可以使用\clearpage然后....\addcontentstoline\listoftables这样..它对我有用..

相关内容