管理 .sty 文件中的标题

管理 .sty 文件中的标题

我使用带有 .sty 文件的模板在 LaTeX 中撰写我的博士论文,但我遇到了标题问题。在章节中介绍参考书目标题没有说明介绍参考书目而是分别在它们之前的章节名称。我尝试使用 header 命令修复 .sty 文件中的相关代码,但它什么也没做,它只显示:

\newenvironment{intro}
     {\chapter*{Uvod}%
      \@mkboth{UVOD}{UVOD}%
      \thispagestyle{empty}%
      }{\addcontentsline{toc}{chapter}{Uvod}}

乌沃德是克罗地亚语中“介绍”的意思

答案1

您不必为此定义环境。如果您使用星号\chapter,则只需添加两行(或三行)。在这里您将写入:

\chapter*{Uvod}
\phantomsection
\addcontentsline{toc}{chapter}{Uvod}
\markboth{UVOD}{UVOD}

\phantomsection仅当您加载hyperref并想要添加指向介绍的书签时才需要。

如果您想要自动化,您可以\starredchapter使用以下修补宏创建专用命令\usepackage{etoolbox}

\let\starredchapter=\chapter
\makeatletter
\patchcmd{\starredchapter}{\secdef\@chapter}{}{}{}
\apptocmd{\@schapter}{%
    \phantomsection%
    \markboth{\protect\MakeUppercase{#1}}{protect\MakeUppercase{#1}}%
    \addcontentsline{toc}{chapter}{#1}%
}{}{}
\makeatother

编辑:上面定义的代码\starredchapter确实有效,只要它在(1)加载之前执行hyperref(2)加载之后或不加载\tableofcontents执行(这也依赖于\chapter*)。因此,它至少是无用的!

我猜这个论坛上有人知道解决这个问题的简单方法。

尽管如此,通过稍微多打一些补丁,仍然可以找到一种解决方法:

\makeatletter
\let\schapter=\chapter
\let\starredchapter=\chapter
\let\@schapterori=\@schapter
\patchcmd{\schapter}{\secdef\@chapter\@schapter}{\@schapterori}{}{}
\patchcmd{\starredchapter}{\secdef\@chapter\@schapter}{\@schapter}{}{}
\patchcmd{\tableofcontents}{\chapter*}{\schapter}{}{}
\apptocmd{\@schapter}{\addcontentsline{toc}{chapter}{#1}\@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}{}{}
\makeatother

\tableofcontents这保存了和的正常行为thebibliography,使它们能够出现在目录和书签中。最后是 MWE 证明一切正常(在标准书籍类中):

\documentclass[a4paper,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[croatian]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[margin=25mm]{geometry}
\usepackage{etoolbox}
\usepackage{lipsum}
\usepackage{multido}

\makeatletter
\let\schapter=\chapter
\let\starredchapter=\chapter
\let\@schapterori=\@schapter
\patchcmd{\schapter}{\secdef\@chapter\@schapter}{\@schapterori}{}{}
\patchcmd{\starredchapter}{\secdef\@chapter\@schapter}{\@schapter}{}{}
\patchcmd{\tableofcontents}{\chapter*}{\schapter}{}{}
\apptocmd{\@schapter}{\phantomsection\addcontentsline{toc}{chapter}{#1}\@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}{}{}
\makeatother

\usepackage[colorlinks,bookmarksnumbered,bookmarksopen]{hyperref}

\begin{document}
\tableofcontents

\starredchapter{Uvod}
\lipsum[1-9]
\chapter{Prvo poglavlje}
\section{Prvi stavak}
\lipsum[10-12]
\section{Drugi stavak}
\lipsum[13]

\chapter{Drugo poglavlje}
\lipsum[14]
\multido{\i=3+1,\ii=5+1}{10}{\chapter{\i-th chapter} \section{novi stavak} \lipsum[\i-\ii]\section{drugog stavka}}

\begin{thebibliography}{1}
\multido{\i=10+1}{27}{
\bibitem{Einstein1905photo\i}
Albert Einstein.
\newblock The photoelectric effect.
\newblock {\em Ann. Phys}, 17(132):4, 19\i.
}
\end{thebibliography}
\end{document}

其中\lipsum\multido仅用于填充文档。

相关内容