目录中有一个页码问题: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
这样..它对我有用..