微调对子图的交叉引用

微调对子图的交叉引用

我有一个关于子图的非常小(可能很愚蠢)的问题。我使用以下代码片段作为子图的名称和引用:

\usepackage{caption}
\usepackage[labelformat=simple]{subcaption}
\renewcommand{\thesubfigure}{Figure \thefigure.(\alph{subfigure}):}
\makeatletter
\renewcommand\p@subfigure{}
\makeatother

此处\ref对子图的命令\label显示以下输出:

Figure <figure no.>.<(subfigure no.)>:

如何删除参考文献中的标点符号“:”,但保留标题标签中的标点符号?请帮忙。

梅威瑟:

\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz, pgf}
\usepackage{caption}
\usepackage[labelformat=simple]{subcaption}
\renewcommand{\thesubfigure}{Figure \thefigure.(\alph{subfigure}):}
\makeatletter
\renewcommand\p@subfigure{}
\makeatother
\begin{document}
    \begin{figure}[h]
        \centering
        \begin{subfigure}{0.45\linewidth}
            \centering
            \begin{tikzpicture}[declare function={a=1.5;b=1;}]
                \fill [fill=gray!25] (b,0) node[anchor=south west] {\scriptsize$ (1,0) $} -- (0,b) node[left] {\scriptsize $ (0,1) $} -- (-b,0) node[anchor=north east] {\scriptsize$ (-1,0) $} -- (0,-b) node[right] {\scriptsize$ (0,-1) $} -- cycle;
                \draw [<->] (-a,0) -- (a,0);
                \draw [<->] (0,-a) -- (0,a);
                \draw (0,0) node[above=0.01pt] {\scriptsize$ (0,0) $} circle (1pt);
            \end{tikzpicture}
            \caption{$ B_{1}((0,0);1) $}
        \end{subfigure}
        \unskip\ \vrule\ 
        \hfil
        \begin{subfigure}{0.45\linewidth}
            \centering
            \begin{tikzpicture}[declare function={a=1.5;b=1;}]
                \fill [fill=gray!25] (0,0) node[above=0.01pt] {\scriptsize$ (0,0) $} circle (b);
                \draw [<->] (-a,0) -- (a,0);
                \draw [<->] (0,-a) -- (0,a);
                \draw (b,0) node[anchor=south west] {\scriptsize$ (1,0) $};
                \draw (0,0) node[above=0.01pt] {\scriptsize$ (0,0) $} circle (1pt);
            \end{tikzpicture}
            \caption{$ B_{2}((0,0);1) $}
            \label{Fig: open ball in p=2}
        \end{subfigure}
        \caption{Open unit balls in plane for $ p=1,2,10,\infty $.}
        \label{Fig: p-open balls}
    \end{figure}
    \ref{Fig: open ball in p=2}
\end{document}

答案1

你问,

如何删除:参考文献中的标点符号但保留标题标签中的[它]?

我认为你应该改变

\usepackage[labelformat=simple]{subcaption}
\renewcommand{\thesubfigure}{Figure \thefigure.(\alph{subfigure}):}

\usepackage[labelformat=simple,labelsep=colon]{subcaption}
\renewcommand{\thesubfigure}{Figure \thefigure.(\alph{subfigure})}

换句话说,您应该将生成标签分隔符()的位置:从确定子图编号出现的位置移开,并移向确定完整标题出现的位置。


附录回答 OP 的后续问题,“你能告诉我如何仅生成\thefigure.(\alph{subfigure})[交叉引用]subfigure吗?”(进一步更新)

答案分为两部分。第一的, 改变

\usepackage[labelformat=simple,labelsep=colon]{subcaption}
\renewcommand{\thesubfigure}{Figure \thefigure.(\alph{subfigure})}

从前面的回答

\DeclareCaptionLabelFormat{SubhajitPaul}{Figure \bothIfFirst{#1}{\nobreakspace}#2}
\captionsetup[subfigure]{labelformat=PaulSubhajitPaul,labelsep=colon}
\renewcommand{\thesubfigure}{\thefigure.(\alph{subfigure})}

即,删除定义中的“Figure”子字符串\thesubfigure,同时注意“Figure”继续显示在标题的标签中。

第二,开始使用cleveref包及其\cref宏来创建交叉引用调用,其中自动包含对象类型——此处为:“Figure”。它的众多巧妙之处之一\cref是它可以采用多个参数,并且会自动确定前缀字符串是否需要以单数或复数形式呈现。请参阅下面的应用程序。

有关交叉引用包的更多信息以及包的介绍cleveref,请参阅帖子交叉引用包:使用哪一个,哪些有冲突?(无耻的自我引用警告!)

最后,完整的 MWE(最小工作示例)及其输出:

在此处输入图片描述

简短评论:我认为在每个子图的标题编号前添加前缀“图”看起来既笨拙又不雅致。您真的担心读者无法自己弄清楚“(a)”和“(b)”是与两个子图相关的编号吗?我希望您的读者不会那么愚钝。

\documentclass{article}
\usepackage{mathtools}
\usepackage{subcaption}
\DeclareCaptionLabelFormat{SubhajitPaul}{Figure \bothIfFirst{#1}{\nobreakspace}#2}
\captionsetup[subfigure]{labelformat=SubhajitPaul,labelsep=colon}
\renewcommand{\thesubfigure}{\thefigure.(\alph{subfigure})}
\makeatletter
\renewcommand\p@subfigure{}
\makeatother

\usepackage[colorlinks]{hyperref}
\usepackage{cleveref} % be sure to load 'cleveref' AFTER 'hyperref'
\crefname{subfigure}{Figure}{Figures}

\begin{document}
\begin{figure}[h]
\begin{subfigure}{0.45\linewidth}
   \caption{$B_{1}((0,0);1)$} \label{Fig:1a}
\end{subfigure}\hfill
\begin{subfigure}{0.45\linewidth}
   \caption{$B_{2}((0,0);1)$} \label{Fig:1b}
\end{subfigure}
\caption{Open unit balls in plane for $ p=1,2,10,\infty $.}
\end{figure}

\cref{Fig:1b}; \cref{Fig:1a,Fig:1b}
\end{document}

相关内容