这个问题让我抓狂。我有一本分成几部分的书,目前目录如下:
但我想隐藏右侧的页码,并将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
。
使用
\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}