10 titlesec宏包与nameref宏包的冲突问题

发布于 2024-11-22 20:09:08

使用titlesec宏包指定titleformat时出现影响了\nameref命令的引用行为,下面的例子说明了这一点。应该如何修复?

正常情况下,无论使用\section还是\section*命令均可正确\nameref:

\documentclass{ctexart}
\usepackage{nameref}
\begin{document}
\section{第一章AAA}\label{sec:A}
我要引用section C: \nameref{sec:C}
\section*{第二章BBB}\label{sec:B}
我要引用section A: \nameref{sec:A}
\section{第三章CCC}\label{sec:C}
我要引用section B: \nameref{sec:B}
\end{document}

image.png

而使用titlesec宏包修改样式后,无法正确\nameref\section*的内容。

\documentclass{ctexart}
\usepackage{nameref}
\usepackage{xcolor}
\usepackage{titlesec}
\titleformat{\section}[frame]
{\normalfont\color{magenta}}
{\footnotesize \enspace \Large \textcolor{magenta}{\S \,\thesection}\enspace}{6pt}
{\Large\filcenter \bf \songti }
\begin{document}
\section{第一章AAA}\label{sec:A}
我要引用section C: \nameref{sec:C}
\section*{第二章BBB}\label{sec:B}
我要引用section A: \nameref{sec:A}
\section{第三章CCC}\label{sec:C}
我要引用section B: \nameref{sec:B}
\end{document}

image.png

进一步测试还发现只要加载titlesec宏包即会影响\nameref\section*等 star version 命令的正确索引。

这种情况下如何处理是所谓的最佳实践Best Practice!)

查看更多

关注者
1
被浏览
65
2 个回答
Sagittarius Rover
Sagittarius Rover 11小时前
我要成为TikZ糕手/(ㄒoㄒ)/~~

其实这是一位群友的问题,按照惯例来自答一下...

一个可能的答案来自 link
进行如下设置即可:

\makeatletter
\def\ttl@useclass#1#2{%
  \@ifstar
    {\ttl@labelfalse\@dblarg{#1{#2}}}% {\ttl@labelfalse#1{#2}[]}%
    {\ttl@labeltrue\@dblarg{#1{#2}}}}
\makeatother

下面是实现的效果:

\documentclass{ctexart}
\usepackage{nameref}
\usepackage{xcolor}
\usepackage{titlesec}
\titleformat{\section}[frame]
{\normalfont\color{magenta}}
{\footnotesize \enspace \Large \textcolor{magenta}{\S \,\thesection}\enspace}{6pt}
{\Large\filcenter \bf \songti }
\makeatletter
\def\ttl@useclass#1#2{%
  \@ifstar
    {\ttl@labelfalse\@dblarg{#1{#2}}}% {\ttl@labelfalse#1{#2}[]}%
    {\ttl@labeltrue\@dblarg{#1{#2}}}}
\makeatother
\begin{document}
\section{第一章AAA}\label{sec:A}
我要引用section C: \nameref{sec:C}
\section*{第二章BBB}\label{sec:B}
我要引用section A: \nameref{sec:A}
\section{第三章CCC}\label{sec:C}
我要引用section B: \nameref{sec:B}
\end{document}

image.png

这个titleformat感觉有点子眼熟,fncychap宏包提供了类似的样式..如下
image.png

枫林晚
枫林晚 11小时前
这家伙很懒,什么也没写!

但是点击引用的位置跳转不到被引用的位置,会出现这个问题吗?

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览