![无衬线字体交叉引用](https://linux22.com/image/337952/%E6%97%A0%E8%A1%AC%E7%BA%BF%E5%AD%97%E4%BD%93%E4%BA%A4%E5%8F%89%E5%BC%95%E7%94%A8.png)
我希望我的交叉引用采用无衬线格式,但我还没有找到方法。
我目前正在使用cleveref
和hyperref
包。
答案1
据我所知,没有办法使用它\crefdefaultlabelformat
来查询要引用的当前计数器类型,从而获取用\crefname
和定义的计数器的相关名称\Crefname
。
但是,\crefformat
可以使用此设置将特定格式更改为无衬线字体(如部分计数器所示)
\crefformat{section}{#2{\sffamily\cref@section@name\ #1}#3}
对 也可以做同样的事情\Crefformat
,\cref@section@name
用\Cref@section@name
)替换
就目前情况而言,\crefmultiformat
和\crefrangeformat
命令尚未改变。
为了防止繁琐的代码复制,我提供了一种使用expl3
语法的方法将计数器类型存储到\seq
列表中,然后在循环中更改格式\switchtosansserifformat
。
\documentclass{article}
\usepackage{xparse}
\usepackage{hyperref}
\usepackage{cleveref}
\ExplSyntaxOn
\makeatletter
\seq_new:N \l_atcold_counter_seq
\newcommand{\addcountertoseq}[1]{%
\seq_set_from_clist:Nn \l_atcold_counter_seq {#1}
}
\newcommand{\switchtosansserifformat}{%
\seq_map_inline:Nn \l_atcold_counter_seq {%
\crefformat{##1}{####2{\protect\sffamily\use:c{cref@##1@name}\ ####1}####3}
\Crefformat{##1}{####2{\protect\sffamily\use:c{Cref@##1@name}\ ####1}####3}
}%
}
\ExplSyntaxOff
\makeatother
\addcountertoseq{section,subsection,subsubsection,figure,table,page}
\switchtosansserifformat
\begin{document}
Outlook: In \cref{foo} we will see that ... and \cref{foofigure} shows that ... and \cref{footable} has the relevant data
Outlook: In \Cref{foo} we will see that ... and \Cref{foofigure} shows that ... and \Cref{footable} has the relevant data
\clearpage
\section{Foo} \label{foo}
\begin{figure}
\caption{A foo figure}\label{foofigure}
\end{figure}
\begin{table}
\caption{A foo table}\label{footable}
\end{table}
\end{document}