如何隐藏目录中的页码?

如何隐藏目录中的页码?

这个问题让我抓狂。我有一本分成几部分的书,目前目录如下:

在此处输入图片描述

但我想隐藏右侧的页码,并将part标题居中。 LaTeX 代码为:

\renewcommand*\part[1]{

\vspace*{160pt}

\addtocounter{part}{1}

\setcounter{chapter}{0}

{\centering\sffamily 

    \Large \textsc{Parte} \Roman{part}

    \par\nobreak

    \vskip 14pt

    \huge \uppercase{#1} \par\nobreak

}

\addcontentsline{toc}{part}{\centering {Parte \thepart} \\ \numberline{} \centering{#1} 

}

\vskip 40pt

}

请问错误在哪里?

我习惯用 C、Php、Javascript 等语言编写代码,在这些语言中传递给函数的参数清晰可见。而这里我有一个带有\part一个参数的函数,即标题#1,而\thepart它类似于全局变量。但是页码在哪里?我期望的是类似的东西\thecontentspage,这里没有类似的东西,并且页码仍然出现在行末,这不是必需的。将数字写入右侧的指令在哪里?

这让我很困惑。我知道 LaTeX 遵循一种范式,一种与其他编程语言截然不同的逻辑,但我还不明白这种逻辑。

我怎样才能删除右边的数字并使标题居中?

当然这是一本书,所以... \documentclass[12pt]{book}


回复

我不确定是否理解了 MWE,我看到关于这个要求存在争议。我猜一个完整的 .tex 文件会产生一个最小的 PDF,这是我为解决其他问题时做过的事情。

但为了完整起见,我必须在 \begin{document} 之前添加所有内容,159 行加上一个最小示例、至少两个部分和一些虚拟章节和部分。超过 200 行...

以下是最终的目录 在此处输入图片描述

问题仍然存在。

希望有人有时间看看下面的代码。

\documentclass[12pt]{book}

\usepackage[italian,english,german]{babel} 
\usepackage{fontspec}
\usepackage{graphicx}
\usepackage{textcomp}
\usepackage{xcolor}
\usepackage[linktoc=all]{hyperref}
\usepackage{titletoc}
\usepackage[odd]{emptypage}
\usepackage{lmodern} 
\usepackage{ulem}
\usepackage{enumitem}
\usepackage{longtable}
\usepackage{caption}
\usepackage{multirow}
\usepackage{amssymb}
\usepackage{amsfonts}

\usepackage{amsmath}
\usepackage{verbatim}
\usepackage{ragged2e}

\usepackage{makeidx}
\usepackage{fancyhdr}
\pagestyle{fancy}

\usepackage{mystyle_17x24}

\title{La crittografia della Repubblica di Venezia}

\author{Paolo Bonavoglia \\
  {\tt [email protected]} 
}

\date{\today}

\newcommand*{\tabbox}[2][t]{%
    \vspace{0pt}\parbox[#1][3.7\baselineskip]{1cm}{\strut#2\strut}}

\renewcommand\labelitemi{---}

\newcommand*\FancyNulla{%
\fancyhead{} % clear all header fields
\fancyfoot{} % clear all footer fields
}

\newcommand*\cleartorightpage{%
    \cleardoublepage
    \FancyNulla
}

\newcommand*\FancyParte[1]{%
\fancyhead{} % clear all header fields
\fancyfoot{} % clear all footer fields
\fancyhead[LE]{\thepage #1}
\fancyhead[CE]{Parte \thepart}
\fancyhead[RE]{}
\fancyfoot[LO]{}
\fancyfoot[CO]{} 
\fancyfoot[RO]{\thepage} 
}

\newcommand*\FancyIndice[1]{%
\fancyhead{} % clear all header fields
\fancyfoot{} % clear all footer fields
\fancyhead[LE]{\thepage}
\fancyhead[CE]{#1}
\fancyhead[RE]{}
\fancyhead[LO]{}
\fancyhead[CO]{#1} 
\fancyhead[RO]{\thepage} 
}
\newcommand*\FancyParteSenzaNumeri[1]{%
\fancyhead{} % clear all header fields
\fancyfoot{} % clear all footer fields
\fancyhead[LE]{}
\fancyhead[CE]{#1}
\fancyhead[RE]{}
\fancyhead[LO]{}
\fancyhead[CO]{} 
\fancyhead[RO]{} 
}

\newcommand*\FancyCapitolo[1]{%
\fancyfoot{} % clear all footer fields
\fancyhead[LE]{\thepage}
\fancyhead[CE]{Parte \thepart}
\fancyhead[RE]{}
\fancyhead[LO]{}
\fancyhead[CO]{Cap. \! \thechapter \; #1}
\fancyhead[RO]{\thepage}

}

\newcommand*\Figura[4]{%
    \begin{figure}[ht]\begin{center}\includegraphics[#1]{#2}            \caption{\small \textit{#3}}
    \label{#4}
    \end{center}\end{figure}
}

\setcounter{table}{0}

\renewcommand*\part[1]{
    \vspace*{160pt}
    \addtocounter{part}{1}
    \setcounter{chapter}{0}
    {\centering\sffamily 
        \Large \textsc{Parte} \Roman{part}
        \par\nobreak
        \vskip 14pt
        \uppercase{#1} \par\nobreak
    }
    
    \addcontentsline{toc}{part}{\centering {Parte \thepart} \\ \numberline{} \centering{#1}  }
    
    \vskip 40pt
}


\titlecontents{chapter}[0pt \addvspace{2em} \hspace*{-2.3em}]
        {\thecontentspage \quad Capitolo \thecontentslabel{} \\}%
        {\hspace{-4pt} }
    {}
    {}
    {}


\titlecontents*{section}[0pt\small]
    {\upshape\-}
    {\thecontentslabel {\;}}
    {}
    {,  {\thecontentspage}}
    [][\ \textendash\ ][]

\titlecontents*{subsection}[0pt\small]
    {\itshape\-}
    {\; \thecontentslabel {\;}}
    {}
    {,  {\upshape\thecontentspage}}
    [][\ \textendash\ ][]

% You can include more LaTeX packages here 
\setlength{\abovecaptionskip}{3pt plus 2pt minus 1pt}
\setlength{\belowcaptionskip}{4pt plus 2pt minus 1pt}

\counterwithout{footnote}{chapter}
\counterwithout{figure}{chapter}
\counterwithout{table}{chapter}


\makeindex

\begin{document}

\fancyhead{} % clear all header fields
\fancyfoot{} % clear all footer fields
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\pagenumbering{roman}

\selectlanguage{italian} %%% remove comment delimiter ('%') and select language if required

\tableofcontents

\pseudochapter{Prefazione}

\cleardoublepage

\setcounter{part}{0}%restore counter
\pagenumbering{arabic}


\part{Le cifre della Repubblica di Venezia}
\clearpage

\FancyParte{Le cifre della Repubblica di Venezia}



\FancyCapitolo{Organizzazione}

\clearpage

\section{La necessità di scrivere in cifra}

\clearpage
xxxx
\clearpage

\section{Dummy}

\section{Useless}

\part{Dummy part}

\section{La necessità di scrivere in cifra}

\clearpage
xxxx
\clearpage

\section{Dummy}

\section{Useless}

\end{document}

答案1

使用此代码

\makeatletter
\def\addcontentslinenopage#1#2#3{% added <<<<<<<<<<<<<<
\begingroup
\phantomsection%
\addtocontents{#1}{\protect\contentsline{#2}{#3}{}{\@currentHref}\protected@file@percent}%
\endgroup
}
\makeatother

\renewcommand*\part[1]{%
    \vspace*{160pt}
    \addtocounter{part}{1}
    \setcounter{chapter}{0}
    {\centering\sffamily 
        \Large \textsc{Parte} \Roman{part}%
        \par\nobreak
        \vskip 14pt
        \uppercase{#1} \par\nobreak
    }   
        \addcontentslinenopage{toc}{part}{\parbox{\linewidth}{\centering Parte \thepart \\  #1}}% changed <<<<<<<<<<     
    \vskip 40pt
}

抑制目录中部分标题右侧显示的页码,并将部分标题居中。

页码是通过命令添加的\addcontentsline

C

使用

\tableofcontents
\thispagestyle{empty} %<<<<<<<<<<<<

抑制目录页的页码。

答案2

我发现的关键思想是https://tex.stackexchange.com/a/455423/107497是将目录中的部分及其标题放入 parbox。我不完全确定为什么这样做会这样(如果删除 中的空格\thecontentslabel} },标题的第一个单词会跳上一行),但它似乎可以完成工作。只要您正在加载 titletoc,您就应该充分利用它来协助您的\part格式化。

\documentclass[openany]{book}
\usepackage[italian,english,german]{babel} 
\usepackage[newparttoc]{titlesec}
\usepackage{titletoc}

\titleclass{\part}{straight}
\titleformat{\part}[display]{\sffamily\centering}{\Large\textsc{Parte} \Roman{part}}{14pt}{\huge\uppercase}
\titlespacing{\part}{0pt}{160pt}{40pt}

% https://tex.stackexchange.com/a/455423/107497
\titlecontents{part}[0pt]
    {\centering}
    {\parbox{\linewidth}{\centering Parte~\thecontentslabel} }
    {}
    {}

\titlecontents*{section}[0pt\small]
    {\upshape\-}
    {\thecontentslabel\;}
    {}
    {, \thecontentspage}
    [\ --\ ]

\counterwithin{chapter}{part}

\usepackage{lipsum}

\begin{document}

\tableofcontents

\part{Le cifre della Repubblica di Venezia}
\section{La necessità di scrivere in cifra}
\lipsum[1]
\section{Dummy}
\lipsum[1]
\section{Useless}
\lipsum[1]

\part{Dummy Part}
\section{La necessità di scrivere in cifra}
\lipsum[2]
\section{Dummy}
\lipsum[2]
\section{Useless}
\lipsum[2]

\end{document}

代码输出

相关内容