我使用 iopart 类来写论文。我使用常用命令包含目录,但我得到的是与标题重叠的附录相关的部分(见图)。
我该如何修复这个问题?
注意:您将需要 iopart 类来进行编译。
一个最小的工作示例——抱歉,有些包是不需要的。
\documentclass[12pt]{iopart}
\usepackage[dvips]{graphicx}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{latexsym}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
%\usepackage{amsmath} % Error with iopart class
\usepackage{color}
\usepackage{psfrag}
\usepackage{rotating}
\usepackage{pgf,pgfsys,pgffor}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage[caption=false]{subfig}
\usepackage{tikz}
\usepackage{hyperref}
\bibliographystyle{iopart-num}
\begin{document}
\title{Main title}% Force line breaks with \\
\begin{abstract}
bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla
bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla
\end{abstract}
\maketitle
\tableofcontents
bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla
\section{Title 1}
bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla \ref{AppendixA}
\section{Title 2}
bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla bla bla blabla \ref{AppendixB}
\appendix
\section{Title A}
\label{AppendixA}
\section{Title B}
\label{AppendixB}
\end{document}
答案1
我的印象是,同意 LaRiFaRi 的观点,这iopart
实际上并没有提供目录。事实上,该命令\tableofcontents
是不断复制的article.cls
(顺便说一下,是旧版本),因为它有一个多余的\@mkboth
命令,将标题设置为不需要的字符串(他们希望将论文标题作为标题)。
无论如何,这是一个补丁,其中我只使用严格必要的包;添加您需要的包(除了lipsum
仅用于生成模拟文本的包)。
请注意,如果附录后还有其他内容,目录中的标题可能会排版错误。如果是这种情况,请告诉我。
\documentclass[12pt]{iopart}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage{lipsum}% just for the example
\makeatletter
\def\@mkboth#1#2{}
\newlength\appendixwidth
\preto\appendix{\addtocontents{toc}{\protect\patchl@section}}
\newcommand{\patchl@section}{%
\settowidth{\appendixwidth}{\textbf{Appendix }}%
\addtolength{\appendixwidth}{1.5em}%
\patchcmd{\l@section}{1.5em}{\appendixwidth}{}{\ddt}%
}
\makeatother
\begin{document}
\title{Main title}
\begin{abstract}
\lipsum[1-2]
\end{abstract}
\maketitle
\tableofcontents
\bigskip
\lipsum[4]
\section{Title 1}
\lipsum[4]
\section{Title 2}
\lipsum[4]
\appendix
\section{Title A}
\label{AppendixA}
\section{Title B}
\label{AppendixB}
\end{document}
答案2
如果您可以接受标题中没有“附录”一词,您可以对进行以下修补iopart.cls
:
% arara: pdflatex
\documentclass[12pt]{iopart}
\makeatletter
\renewcommand\@appendixstar{\@@par
\ifnumbysec
\@addtoreset{table}{section}
\@addtoreset{figure}{section}\fi
\setcounter{section}{0}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{equation}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\def\thesection{\Alph{section}} % this line has been \def\thesection{Appendix \Alph{section}} before
\def\theequation{\ifnumbysec
\Alph{section}.\arabic{equation}\else
\Alph{section}\arabic{equation}\fi}
\def\thetable{\ifnumbysec
\Alph{section}\arabic{table}\else
A\arabic{table}\fi}
\def\thefigure{\ifnumbysec
\Alph{section}\arabic{figure}\else
A\arabic{figure}\fi}}
\makeatother
\begin{document}
\tableofcontents
\section{Title 1}
\appendix
\section{Title A}
\end{document}
由于“目录”一词在本页出现了两次,似乎iopart
这里不打算使用目录。