目录中的页码应左对齐

目录中的页码应左对齐

我正在写论文,但不幸的是我遇到了一个问题。在我们的论文模板中,目录中的页码应该左对齐(默认为右对齐),如图所示。当我寻找解决方案时,我了解到包tocloft允许使用\renewcommand{\cftpnumalign}{l}

但它给出了一个错误

"! LaTeX Error: \cftpnumalign undefined."  

我不知道该如何解决。有没有简单的解决办法?

先感谢您。 !!

在此处输入图片描述

这是一个例子。

\documentclass{article}

\usepackage{tocloft}
\usepackage{titletoc}

\titlecontents{section}
[0.0em]
{}
{\thecontentslabel.\enspace{\hspace*{-0.2em}}}
{}
{\titlerule*[0.25pc]{.}\contentspage}


\titlecontents{subsection}
[1.6em]
{}
{\thecontentslabel.\enspace{\hspace*{-0.2em}}}
{}
{\titlerule*[0.25pc]{.}\contentspage}


\titlecontents{subsubsection}
[1.6em]
{}
{\thecontentslabel.\enspace{\hspace*{-0.2em}}}
{}
{\titlerule*[0.25pc]{.}\contentspage}


\setcounter{tocdepth}{3}
\setlength{\cftsecnumwidth}{1ex}
\setlength{\cftsubsecnumwidth}{3ex}
\setlength{\cftbeforesecskip}{1pt}

\renewcommand{\cftpnumalign}{l} 

\begin{document}
\pagenumbering{roman}

\tableofcontents
\newpage
\section{one}

\newpage
\addtocounter{page}{25}
\subsection{two}

\newpage
\addtocounter{page}{9}
\section{three}


\newpage
\addtocounter{page}{9}
\section{four}


\newpage
\addtocounter{page}{1}
\subsection{five}


\clearpage
\pagenumbering{arabic}

\tableofcontents
\newpage
\section{one}

\newpage
\addtocounter{page}{25}
\subsection{two}

\newpage
\addtocounter{page}{259}
\section{three}


\newpage
\addtocounter{page}{8699}
\section{four}


\newpage
\addtocounter{page}{1}
\subsection{five}


\end{document}

答案1

不要混合使用两个与 ToC 相关的包。

这就是为什么对 的任何调整\cftpnumalign都不会显示在目录中,因为titletoc完全重写了处理 ToC 相关条目的方式。

以下是改变对齐方式(和宽度)所需的全部内容:

\makeatletter
\renewcommand{\contentspage}[1][\thecontentspage]{\hb@xt@\@pnumwidth{#1\hfil}\hspace*{-\@pnumwidth}}
\renewcommand{\@pnumwidth}{3em}
\makeatother

第一个调整是\contentspage为了将对齐方式从右r(默认)更改为l左。第二个调整将页面宽度设置为3em(默认为 15pt)。

在此处输入图片描述

\documentclass{article}

\usepackage{titletoc}

\titlecontents{section}
  [0.0em]
  {}
  {\thecontentslabel.\enspace{\hspace*{-0.2em}}}
  {}
  {\titlerule*[0.25pc]{.}\contentspage}

\titlecontents{subsection}
  [1.6em]
  {}
  {\thecontentslabel.\enspace{\hspace*{-0.2em}}}
  {}
  {\titlerule*[0.25pc]{.}\contentspage}

\titlecontents{subsubsection}
  [1.6em]
  {}
  {\thecontentslabel.\enspace{\hspace*{-0.2em}}}
  {}
  {\titlerule*[0.25pc]{.}\contentspage}

\setcounter{tocdepth}{3}

\makeatletter
\renewcommand{\contentspage}[1][\thecontentspage]{\hb@xt@\@pnumwidth{#1\hfil}\hspace*{-\@pnumwidth}}
\renewcommand{\@pnumwidth}{3em}
\makeatother

\begin{document}
\pagenumbering{roman}

\tableofcontents
\newpage
\section{one}

\newpage
\addtocounter{page}{25}
\subsection{two}

\newpage
\addtocounter{page}{9}
\section{three}


\newpage
\addtocounter{page}{9}
\section{four}


\newpage
\addtocounter{page}{1}
\subsection{five}

\clearpage
\pagenumbering{arabic}

\tableofcontents
\newpage
\section{one}

\newpage
\addtocounter{page}{25}
\subsection{two}

\newpage
\addtocounter{page}{259}
\section{three}

\newpage
\addtocounter{page}{8699}
\section{four}

\newpage
\addtocounter{page}{1}
\subsection{five}

\end{document}

框架由showframe

答案2

我不知道 tocloft 或 titletoc,但对于普通的旧文章类......

\documentclass{article}
\usepackage{showframe}

\makeatletter
\def\@pnumwidth{.5in}% maximum width for number on right

\renewcommand*\l@part[2]{%
  \ifnum \c@tocdepth >-2\relax
    \addpenalty\@secpenalty
    \addvspace{2.25em \@plus\p@}%
    \setlength\@tempdima{3em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      {\leavevmode
       \large \bfseries #1\hfil \hb@xt@\@pnumwidth{#2\hss}}\par% left align
       \nobreak
       \if@compatibility
         \global\@nobreaktrue
         \everypar{\global\@nobreakfalse\everypar{}}%
      \fi
    \endgroup
  \fi}

\renewcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \bfseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{#2\hss}\par% left align
    \endgroup
  \fi}

\def\@dottedtocline#1#2#3#4#5{%
 \ifnum #1>\c@tocdepth \else
 \vskip \z@ \@plus.2\p@
 {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
 \parindent #2\relax\@afterindenttrue
 \interlinepenalty\@M
 \leavevmode
 \@tempdima #3\relax
 \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
 {#4}\nobreak
 \leaders\hbox{$\m@th
 \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
 mu$}\hfill
 \nobreak
 \hb@xt@\@pnumwidth{\normalfont \normalcolor #5\hfil}% left align
 \par}%
 \fi}
\makeatother

\begin{document}
\pagenumbering{roman}

\tableofcontents
\newpage
\section{one}

\newpage
\addtocounter{page}{25}
\subsection{two}

\newpage
\addtocounter{page}{9}
\section{three}


\newpage
\addtocounter{page}{9}
\section{four}


\newpage
\addtocounter{page}{1}
\subsection{five}


\clearpage
\pagenumbering{arabic}

\newpage
\section{one}

\newpage
\addtocounter{page}{25}
\subsection{two}

\newpage
\addtocounter{page}{259}
\section{three}


\newpage
\addtocounter{page}{8699}
\section{four}


\newpage
\addtocounter{page}{1}
\subsection{five}


\end{document}

相关内容