话语章、部、附录、表格、图表、等在文中均小写并拼写出来(但有时在括号引用中缩写)。
(《芝加哥格式手册》第 16 版第 8.178 节)
梅威瑟:
\documentclass{scrartcl}
\usepackage[demo]{graphicx}
\usepackage{cleveref}
\begin{document}
\section{Geometric abstraction}
\Cref{myfig} shows a black square. For a black square, please refer to \cref{myfig}. Squares can be black (cf.\ \cref{myfig}).
\begin{figure}
\centering
\includegraphics[width=6cm,height=6cm]{fig1.pdf}
\caption[asd]{Kazimir Malevich. \textit{Black Square.} 1915. Oil on canvas. State Russian Museum, St Petersburg.}
\label{myfig}
\end{figure}
\end{document}
MWE 生产:
我正在寻找:
有没有一种聪明的方法(抱歉)来实现这一点cleveref
?我知道这\Cref{}
将始终产生完整形式的大写引用,所以这是一个好的开始。但我该如何处理句子中间的非括号引用?
答案1
这是另一种不需要深入研究 内部结构的方法cleveref
。其思路是使用 本地更改名称\crefname
。
\documentclass{scrartcl}
\usepackage[demo]{graphicx}
\usepackage[noabbrev]{cleveref}
\DeclareRobustCommand{\abbrevcrefs}{%
\crefname{figure}{fig.}{figs.}%
\crefname{equation}{eqn.}{eqns.}%
}
\DeclareRobustCommand{\cshref}[1]{{\abbrevcrefs\cref{#1}}}
\begin{document}
\section{Geometric abstraction}
\begin{equation}
\label{eq:x}
x = 1.
\end{equation}
\Cref{myfig} shows a black square. For a black square, please refer to
\cref{myfig,eq:x}. Squares can be black (cf.\ \cshref{myfig,eq:x}).
Back to \cref{myfig,eq:x}.
\begin{figure}
\centering
\includegraphics[width=6cm,height=6cm]{fig1.pdf}
\caption[asd]{Kazimir Malevich. \textit{Black Square.} 1915. Oil on canvas. State Russian Museum, St Petersburg.}
\label{myfig}
\end{figure}
\end{document}
我们加载了cleveref
包含noabbrev
获取所有全名版本的选项的包。我们提供了封装在命令中的缩写形式列表\abbrevcrefs
,然后\cshref
为缩写引用定义了一个新命令,该命令\cref
调用了由组进行\abbrevcrefs
并包含在组中以使效果局部化。
可以使用相同的通用方法来制作cleveref
包中其他命令的修改版本。
我原本希望能够只\@cref@abbrevtrue
在本地使用内部开关来启用缩写,但事实证明,cleveref
只有在最初定义标签名称时才使用此开关,而不是在排版时使用。标签定义过程与代码挂钩\AtBeginDocument
,无法轻松重新评估以提取缩写版本,因此需要自己设置缩写。
答案2
好的,我想我找到了一个解决方案——但它既不优雅也不聪明;-)
我定义了一个新命令lcCref
,它将始终给出小写的完整形式引用,并且还能正确处理复数引用:
\usepackage{xstring}
\def\lcCref#1{%
\StrCount{#1}{,}[\n]%
\ifnum\n>0\relax%
\StrBefore[1]{#1}{,}[\myFirst]%
\lcnamecrefs{\myFirst}~\labelcref{#1}%
\else%
\lcnamecref{#1}~\labelcref{#1}%
\fi%
}
首先,计算参数的数量。如果引用单个标签,则将lcnamecref
和的输出labelcref
合并(参见cleveref
文档)。如果有多个引用,lcnamecrefs
则使用而不是lcnamecref
。StrBefore
构造是必需的,因为lcnamecrefs
只接受单个标签作为参数。
\lcCref{myfig}
将导致figure 1
,而\lcCref{myfig,anotherfig}
将导致figures 1 and 2
。
我感觉这可能过于复杂。但它似乎有效...