10 如何使得目录的引导线右侧和页码直接无间距

发布于 2025-04-04 15:33:00

当前设置下如何使得目录的引导线右侧和页码直接无间距,或者添加一个较小的可设置的间距,而右侧的页码宽度是根据页码位数自适应而非固定。
以及当前状态下的{\textcircled{\arabic{paragraph}}}设置的圆形数字标题标号“①”显示的看起来有些不正常,比如数字“1”和“〇”上侧几乎重合了,怎么使得这个标号变的正常一些呢。望大佬解答!!1b7380825bba249b1606d1793c51d47e.png
c7855249-ac80-4838-a3eb-170024e59c94.png
附代码:

\documentclass[a4paper,12pt,openany]{book}
\usepackage{ctex}         % 中文支持
\usepackage{fontspec}     % 字体配置
\usepackage[showframe]{geometry}     % 页面几何设置
\usepackage{tocloft}      % 目录自定义
\usepackage{titlesec}     % 章节标题自定义
\usepackage{tikz}         % 绘图功能,用于圆形编号
\geometry{
    a4paper,
    top=2.5cm,        % 上边距
    bottom=2.5cm,     % 下边距
    left=2.5cm,       % 左边距
    right=2.5cm,      % 右边距
    headheight=1.5cm, % 页眉高度
    headsep=16.75pt,  % 页眉与正文间距
    footskip=0.75cm   % 页脚与正文间距
}
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}   
% 章节计数器格式设置
\renewcommand{\thechapter}{\chinese{chapter}}          % 一
\renewcommand{\thesection}{\chinese{section}}          % 一
\renewcommand{\thesubsection}{\arabic{subsection}}     % 1
\renewcommand{\thesubsubsection}{\arabic{subsubsection}} % 1
\renewcommand{\theparagraph}{\textcircled{\arabic{paragraph}}} % ①
%目录缩进设置
\setlength{\cftchapindent}{0pt}      % 章不缩进
\setlength{\cftsecindent}{2em}       % 节缩进2em
\setlength{\cftsubsecindent}{4.1em}    % 条缩进3em
\setlength{\cftsubsubsecindent}{4em} % 项缩进4em
\setlength{\cftparaindent}{6em}      % paragraph缩进5em
% 目录编号前后符号设置
% 章:一、 标题
\renewcommand{\cftchapaftersnum}{、}   % 顿号+空格
\setlength{\cftchapnumwidth}{2em}     % 一级标题(章)的编号宽度
% 节:(一) 标题
\renewcommand{\cftsecpresnum}{(}                    % 编号前加左括号
\renewcommand{\cftsecaftersnum}{)}    % 右括号+空格
\setlength{\cftsecnumwidth}{2.56em}    % 二级标题(节)的编号宽度
% 条:1. 标题
\renewcommand{\cftsubsecaftersnum}{.}   % 使用可见字符标记间距位置
\setlength{\cftsubsecnumwidth}{1.467em}  % 减小编号宽度
% 项:(1) 标题
\renewcommand{\cftsubsubsecpresnum}{(}        % 编号前加左括号
\renewcommand{\cftsubsubsecaftersnum}{)}      % 右括号+空格
\setlength{\cftsubsubsecnumwidth}{2em}       % 四级标题(项)的编号宽度
% 项:① 标题
\renewcommand{\cftparapresnum}{}            % 编号前无符号
\renewcommand{\cftparaaftersnum}{}          % 编号后加空格
\setlength{\cftparanumwidth}{1em}         % 编号宽度
%=====================================================
% 正文标题样式设置
%  章:第X章、标题 定义chapter格式  禁用默认换页行为
\titleclass{\chapter}{straight} 
% 自定义标题格式(保留您的原有设置)
\titleformat{\chapter}[block]
{\normalfont\zihao{2}\heiti\raggedright}
{\hspace{2em}\thechapter、}
{0em}
{}
% 精确控制间距(标题前=1行距,标题后=0)
\titlespacing*{\chapter}{0pt}{\baselineskip}{0pt} 
% 节:(X)标题
\titleformat{\section}
{\raggedright\heiti\zihao{3}}        % 格式
{\hspace{31.5pt}(\thesection)}        % 标签
{0em}{}                 % 间距和标题
\titlespacing{\section}
{0pt}{0pt}{0pt}       % 左间距、上间距、下间距
%  条:X.标题
\titleformat{\subsection}
{\raggedright\heiti\zihao{4}}        % 格式
{\hspace{31.5pt}\thesubsection.}       % 标签(全角点)
{0em}{}                 % 间距和标题
\titlespacing{\subsection}
{0pt}{0pt}{0pt}       % 左间距、上间距、下间距
% 项:(X)标题
\titleformat{\subsubsection}
{\raggedright\heiti\zihao{-4}}       % 格式
{\hspace{31.5pt}(\thesubsubsection)}  % 标签
{0em}{}                 % 间距和标题
\titlespacing{\subsubsection}
{0pt}{0pt}{0pt}       % 左间距、上间距、下间距
%段:① 标题
\titleformat{\paragraph}
{\raggedright\heiti\zihao{-4}}       % 格式
{\hspace{31.5pt}\theparagraph}          % 标签
{0pt}{}                  % 间距和标题
\titlespacing{\paragraph}
{0pt}{0pt}{0pt}        % 左间距、上间距、下间距
%=====================================================
% 目录格式设置
%=====================================================
%  目录标题格式
\renewcommand{\contentsname}{\heiti\zihao{3}\centerline{目\quad 录}}
%  引导线设置
\renewcommand{\cftdot}{.}                % 引导点符号
\renewcommand{\cftdotsep}{0.5}           % 引导点密度(值越小越密集)
\renewcommand{\cftchapdotsep}{\cftdotsep} % 章引导点密度继承全局设置
% 各层级引导线样式
\renewcommand{\cftchapleader}{\cftdotfill{\cftchapdotsep}}   % 章
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}        % 节
\renewcommand{\cftsubsecleader}{\cftdotfill{\cftdotsep}}     % 条
\renewcommand{\cftsubsubsecleader}{\cftdotfill{\cftdotsep}}  % 项

% 使用 tocloft 的内部命令设置页码前的间距为零
\makeatletter
\renewcommand{\@pnumwidth}{1em}        % 页码宽度
\renewcommand{\@tocrmarg}{1em}         % 设置为与页码宽度相同,消除间距
\makeatother

% 目录间距控制
\setlength{\cftbeforetoctitleskip}{0pt}  % 目录标题与页面顶部间距
\setlength{\cftaftertoctitleskip}{0pt}   % 目录标题与内容间距
\setlength{\cftbeforechapskip}{0pt}      % 章标题间间距
\setlength{\cftbeforesecskip}{0pt}       % 节标题间间距
\setlength{\cftbeforesubsecskip}{0pt}    % 条标题间间距
\setlength{\cftbeforesubsubsecskip}{0pt} % 项标题间间距
%  目录文字样式
\renewcommand{\cftchapfont}{\songti\fontsize{12pt}{14pt}\selectfont} % 章标题字体
\renewcommand{\cftchappagefont}{\songti\zihao{-4}}  % 章页码字体
\renewcommand{\cftsecfont}{\songti\zihao{-4}}       % 节标题字体
\renewcommand{\cftsecpagefont}{\songti\zihao{-4}}   % 节页码字体
\renewcommand{\cftsubsecfont}{\songti\zihao{-4}}    % 条标题字体
\renewcommand{\cftsubsecpagefont}{\songti\zihao{-4}}% 条页码字体
\renewcommand{\cftsubsubsecfont}{\songti\zihao{-4}} % 项标题字体
\renewcommand{\cftsubsubsecpagefont}{\songti\zihao{-4}}% 项页码字体
\begin{document}
    \tableofcontents
    \newpage
    \chapter*※※※※※※※※{※※※※※※※※1}
    \addcontentsline{toc}{chapter}{※※※※※※※※1} % 手动添加到目录
    \chapter{※※※※※※※※}
    撒打算打算
    
    \section{※※※※※※※※}
    打算
    
    \subsection{※※※※※※※※}
    三点睡得
    
    \subsubsection{※※※※※※※※}
    大叔大撒
    
    \paragraph{※※※※※※※※}
    
    撒大声地
    
    \paragraph{※※※※※※※※}
    \chapter{※※※※※※※※}
dasdasdadasdada
\end{document}

查看更多

关注者
0
被浏览
100
Sagittarius Rover
Sagittarius Rover 17小时前
我要成为Typst糕手/(ㄒoㄒ)/~~

请注意,这里必须换行,否则代码块无法被正确高亮,我已经帮你改过来了...

image.png

一个问题应该仅集中在一个key-point上。下次提问注意,不要同时问多个不太相关的问题,请分开提问。

关于第一个问题,疑似duplicated as this: https://ask.latexstudio.net/ask/question/8102.html

关于第二个问题,推荐阅读:
https://blog.ljguo.top/2024/06/textcircled-numbers 『需要魔法』
https://mp.weixin.qq.com/s/Zk6GvAYIHVKc-b5HXavAVg 『不需要魔法』


大致修改了两处:

  • 使用了耿楠老师的circledtext宏包
\renewcommand{\theparagraph}{\circledtext{\arabic{paragraph}}} % ①
  • 借助雾月老师的妙招
%%%%%%%%%%% https://ask.latexstudio.net/ask/question/8102.html
\makeatletter%%
\renewcommand{\cftchapfillnum}[1]{%
  {\cftchapleader}\nobreak
  \makebox{\cftchappagefont #1}\cftchapafterpnum\par
}
\renewcommand{\cftsecfillnum}[1]{%
  {\cftsecleader}\nobreak
  \makebox{\cftsecpagefont #1}\cftsecafterpnum\par
}
\renewcommand{\cftsubsecfillnum}[1]{%
  {\cftsubsecleader}\nobreak
  \makebox{\cftsubsecpagefont #1}\cftsubsecafterpnum\par
}
\renewcommand{\cftsubsubsecfillnum}[1]{%
  {\cftsubsubsecleader}\nobreak
  \makebox{\cftsubsubsecpagefont #1}\cftsubsubsecafterpnum\par
}
\renewcommand{\cftparafillnum}[1]{%
  {\cftparaleader}\nobreak
  \makebox{\cftparapagefont #1}\cftparaafterpnum\par
}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

image.png

下面是完整代码...看上去是一部旷世巨作的模板啊,就是感觉有点ai味...

\documentclass[a4paper,12pt,openany]{book}
\usepackage{ctex}         % 中文支持
% \usepackage{fontspec}     % 字体配置 没必要...
\usepackage[showframe]{geometry}     % 页面几何设置
\usepackage{tocloft}      % 目录自定义
\usepackage{titlesec}     % 章节标题自定义
\usepackage{tikz}         % 绘图功能,用于圆形编号
\usepackage{circledtext}%%%%modify
\geometry{
    a4paper,
    top=2.5cm,        % 上边距
    bottom=2.5cm,     % 下边距
    left=2.5cm,       % 左边距
    right=2.5cm,      % 右边距
    headheight=1.5cm, % 页眉高度
    headsep=16.75pt,  % 页眉与正文间距
    footskip=0.75cm   % 页脚与正文间距
}
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}   
% 章节计数器格式设置
\renewcommand{\thechapter}{\chinese{chapter}}          % 一
\renewcommand{\thesection}{\chinese{section}}          % 一
\renewcommand{\thesubsection}{\arabic{subsection}}     % 1
\renewcommand{\thesubsubsection}{\arabic{subsubsection}} % 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%modify \circledtext
\renewcommand{\theparagraph}{\circledtext{\arabic{paragraph}}} % ①
%目录缩进设置
\setlength{\cftchapindent}{0pt}      % 章不缩进
\setlength{\cftsecindent}{2em}       % 节缩进2em
\setlength{\cftsubsecindent}{4.1em}    % 条缩进3em
\setlength{\cftsubsubsecindent}{4em} % 项缩进4em
\setlength{\cftparaindent}{6em}      % paragraph缩进5em
% 目录编号前后符号设置
% 章:一、 标题
\renewcommand{\cftchapaftersnum}{、}   % 顿号+空格
\setlength{\cftchapnumwidth}{2em}     % 一级标题(章)的编号宽度
% 节:(一) 标题
\renewcommand{\cftsecpresnum}{(}                    % 编号前加左括号
\renewcommand{\cftsecaftersnum}{)}    % 右括号+空格
\setlength{\cftsecnumwidth}{2.56em}    % 二级标题(节)的编号宽度
% 条:1. 标题
\renewcommand{\cftsubsecaftersnum}{.}   % 使用可见字符标记间距位置
\setlength{\cftsubsecnumwidth}{1.467em}  % 减小编号宽度
% 项:(1) 标题
\renewcommand{\cftsubsubsecpresnum}{(}        % 编号前加左括号
\renewcommand{\cftsubsubsecaftersnum}{)}      % 右括号+空格
\setlength{\cftsubsubsecnumwidth}{2em}       % 四级标题(项)的编号宽度
% 项:① 标题
\renewcommand{\cftparapresnum}{}            % 编号前无符号
\renewcommand{\cftparaaftersnum}{}          % 编号后加空格
\setlength{\cftparanumwidth}{1em}         % 编号宽度
%=====================================================
% 正文标题样式设置
%=====================================================
% 章:第X章、标题 定义chapter格式  禁用默认换页行为
\titleclass{\chapter}{straight} 
% 自定义标题格式(保留您的原有设置)
\titleformat{\chapter}[block]
    {\normalfont\zihao{2}\heiti\raggedright}
    {\hspace{2em}\thechapter、}
    {0em}
    {}
% 精确控制间距(标题前=1行距,标题后=0)
\titlespacing*{\chapter}{0pt}{\baselineskip}{0pt} 
% 节:(X)标题
\titleformat{\section}
    {\raggedright\heiti\zihao{3}}        % 格式
    {\hspace{31.5pt}(\thesection)}        % 标签
    {0em}{}                 % 间距和标题
    \titlespacing{\section}
    {0pt}{0pt}{0pt}       % 左间距、上间距、下间距
%  条:X.标题
\titleformat{\subsection}
    {\raggedright\heiti\zihao{4}}        % 格式
    {\hspace{31.5pt}\thesubsection.}       % 标签(全角点)
    {0em}{}                 % 间距和标题
    \titlespacing{\subsection}
    {0pt}{0pt}{0pt}       % 左间距、上间距、下间距
% 项:(X)标题
\titleformat{\subsubsection}
    {\raggedright\heiti\zihao{-4}}       % 格式
    {\hspace{31.5pt}(\thesubsubsection)}  % 标签
    {0em}{}                 % 间距和标题
    \titlespacing{\subsubsection}
    {0pt}{0pt}{0pt}       % 左间距、上间距、下间距
%段:① 标题
\titleformat{\paragraph}
    {\raggedright\heiti\zihao{-4}}       % 格式
    {\hspace{31.5pt}\theparagraph}          % 标签
    {0pt}{}                  % 间距和标题
    \titlespacing{\paragraph}
    {0pt}{0pt}{0pt}        % 左间距、上间距、下间距
%=====================================================
% 目录格式设置
%=====================================================
% 目录标题格式
\renewcommand{\contentsname}{\heiti\zihao{3}\centerline{目\quad 录}}
% 引导线设置
\renewcommand{\cftdot}{.}                % 引导点符号
\renewcommand{\cftdotsep}{0.5}           % 引导点密度(值越小越密集)
\renewcommand{\cftchapdotsep}{\cftdotsep} % 章引导点密度继承全局设置
% 各层级引导线样式
\renewcommand{\cftchapleader}{\cftdotfill{\cftchapdotsep}}   % 章
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}        % 节
\renewcommand{\cftsubsecleader}{\cftdotfill{\cftdotsep}}     % 条
\renewcommand{\cftsubsubsecleader}{\cftdotfill{\cftdotsep}}  % 项
% 使用 tocloft 的内部命令设置页码前的间距为零
\makeatletter
\renewcommand{\@pnumwidth}{1em}        % 页码宽度
\renewcommand{\@tocrmarg}{1em}         % 设置为与页码宽度相同,消除间距
\makeatother
% 目录间距控制
\setlength{\cftbeforetoctitleskip}{0pt}  % 目录标题与页面顶部间距
\setlength{\cftaftertoctitleskip}{0pt}   % 目录标题与内容间距
\setlength{\cftbeforechapskip}{0pt}      % 章标题间间距
\setlength{\cftbeforesecskip}{0pt}       % 节标题间间距
\setlength{\cftbeforesubsecskip}{0pt}    % 条标题间间距
\setlength{\cftbeforesubsubsecskip}{0pt} % 项标题间间距
%  目录文字样式
\renewcommand{\cftchapfont}{\songti\fontsize{12pt}{14pt}\selectfont} % 章标题字体
\renewcommand{\cftchappagefont}{\songti\zihao{-4}}  % 章页码字体
\renewcommand{\cftsecfont}{\songti\zihao{-4}}       % 节标题字体
\renewcommand{\cftsecpagefont}{\songti\zihao{-4}}   % 节页码字体
\renewcommand{\cftsubsecfont}{\songti\zihao{-4}}    % 条标题字体
\renewcommand{\cftsubsecpagefont}{\songti\zihao{-4}}% 条页码字体
\renewcommand{\cftsubsubsecfont}{\songti\zihao{-4}} % 项标题字体
\renewcommand{\cftsubsubsecpagefont}{\songti\zihao{-4}}% 项页码字体
%%%%%%%%%%% https://ask.latexstudio.net/ask/question/8102.html
\makeatletter%%
\renewcommand{\cftchapfillnum}[1]{%
  {\cftchapleader}\nobreak
  \makebox{\cftchappagefont #1}\cftchapafterpnum\par
}
\renewcommand{\cftsecfillnum}[1]{%
  {\cftsecleader}\nobreak
  \makebox{\cftsecpagefont #1}\cftsecafterpnum\par
}
\renewcommand{\cftsubsecfillnum}[1]{%
  {\cftsubsecleader}\nobreak
  \makebox{\cftsubsecpagefont #1}\cftsubsecafterpnum\par
}
\renewcommand{\cftsubsubsecfillnum}[1]{%
  {\cftsubsubsecleader}\nobreak
  \makebox{\cftsubsubsecpagefont #1}\cftsubsubsecafterpnum\par
}
\renewcommand{\cftparafillnum}[1]{%
  {\cftparaleader}\nobreak
  \makebox{\cftparapagefont #1}\cftparaafterpnum\par
}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{zhlipsum}
\begin{document}
    \tableofcontents
    \newpage
    \chapter*※※※※※※※※{※※※※※※※※1}
    \addcontentsline{toc}{chapter}{※※※※※※※※1} % 手动添加到目录
    \chapter{※※※※※※※※}
    \section{※※※※※※※※}
    \zhlipsum[1-50]
    \subsection{※※※※※※※※}
    \zhlipsum[1-50]
    \subsubsection{※※※※※※※※}
    \zhlipsum[1-50]
    \zhlipsum[1-50]
    \paragraph{※※※※※※※※}
    \zhlipsum[1-50]
    \zhlipsum[1-50]
    \paragraph{※※※※※※※※}
    \zhlipsum[1-50]
    \chapter{※※※※※※※※}
\end{document}
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览