我有一个关于子图的非常小(可能很愚蠢)的问题。我使用以下代码片段作为子图的名称和引用:
\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}