在使用 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
如果您希望在使用 时抑制单词section
、table
和的连字符,那么您可能还希望在其他情况下抑制这些单词的连字符。如果是这种情况,只需运行figure
\cref
\hyphenation{section table figure}
在序言中。
如果您确实希望将 、 和 的连字符抑制限制在figure
的table
输出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}}