使用 Cleveref 包时,“section”、“Table”等无需连字符

使用 Cleveref 包时,“section”、“Table”等无需连字符

在使用 Cleveref 包中的 \cref 命令时,我想删除“section”、“Table”、“Figure”等单词行末的连字符。我当前的解决方案如下:

\crefname{table}{\mbox{Table}}{Tables}

但我不确定这是否是最好的方法,因为我必须对图形、方程式等重复此命令。

我尝试了以下操作但认为存在无限递归问题:

\renewcommand{\cref}[1]{\cref{#1}}

因此尝试了这个,但还是同样的问题:

\newcommand{\crefboxed}[1]{\mbox{\cref{#1}}}
\renewcommand{\cref}[1]{\crefboxed{#1}}

有什么见解吗?

答案1

回答无限递归问题:

\let\oldcref\cref

在那之后

\renewcommand{\cref}[1]{\mbox{\oldcref{#1}}}

或者

\def\cref#1{\mbox{\oldcref{#1}}}

关于 Mico 提到的更多参数的问题,你可以这样做:

\def\cref#1{\foreach\arg[count=\j from 1] in {#1}{\xdef\NumArgs{\j}}\foreach \argument[count=\i from 1] in {#1}{\ifnum\i=1\mbox{\oldcref{\argument}}\else \ifnum\i=\NumArgs{} and \ref{\argument}\else, \ref{\argument}\fi\fi}}

只能对相同类型的参数起作用(仅表格或仅图形等)...无论如何,我的答案是关于无限递归的......(但感谢@Mico的评论)

PS:您需要pgffor这个包..

答案2

如果您希望在使用 时抑制单词sectiontable和的连字符,那么您可能还希望在其他情况下抑制这些单词的连字符。如果是这种情况,只需运行figure\cref

\hyphenation{section table figure}

在序言中。

如果您确实希望将 、 和 的连字符抑制限制在figuretable输出section范围内\cref,只需在前言中添加以下指令(cleveref自然是在加载 之后):

\crefname{section}{\mbox{section}}{\mbox{sections}}
\Crefname{figure}{\mbox{Figure}}{\mbox{Figures}}
\crefname{table}{\mbox{table}}{\mbox{tables}}

如果你碰巧跑得\Cref也好\cref,你还需要添加

\Crefname{section}{\mbox{Section}}{\mbox{Sections}}
\Crefname{figure}{\mbox{Figure}}{\mbox{Figures}}
\Crefname{table}{\mbox{Table}}{\mbox{Tables}}

相关内容