我有一个文档,figure
其环境如下:
\documentclass[a4paper,10pt]{article}
\usepackage{subfig}
\usepackage{tikz}
\makeatletter
\newbox\sf@box
\newenvironment{SubFloat}[2][]%
{\def\sf@one{#1}%
\def\sf@two{#2}%
\setbox\sf@box\hbox
\bgroup}%
{ \egroup
\ifx\@empty\sf@two\@empty\relax
\def\sf@two{\@empty}
\fi
\ifx\@empty\sf@one\@empty\relax
\subfloat[\sf@two]{\box\sf@box}%
\else
\subfloat[\sf@one][\sf@two]{\box\sf@box}%
\fi}
\makeatother
\begin{document}
\begin{figure}
\centering
\begin{SubFloat}
{\label{image1}}
\includegraphics[width=0.4\textwidth]{image1.jpg}
\end{SubFloat}
\qquad
\begin{SubFloat}
{\label{image2}}
\includegraphics[width=0.4\textwidth]{image2.jpg}
\end{SubFloat}
\end{figure}
\end{document}
(编译自pdflatex
)
LaTeX 在每个图像下方放置字母(、、(a)
等),而我希望它放置数字。(b)
(c)
我怎能这样做?
答案1
要重新定义包装的标签subfig
使用:
\renewcommand*\thesubfigure{\arabic{subfigure}}
为了使效果保持局部性,请在figure
环境中使用它,如下所示。正如您在后续使用中看到的那样,标签将恢复为使用默认(a)
格式:
如果您希望这影响您的整个文档,只需将其添加\renewcommand
到序言中。
代码:
\documentclass[a4paper,10pt]{article}
\usepackage[demo]{graphicx}% <----- remove "demo" option for real use
\usepackage{subfig}
\usepackage{tikz}
%\usepackage[paperheight=5.5in]{geometry}% For image capture
\makeatletter
\newbox\sf@box
\newenvironment{SubFloat}[2][]%
{\def\sf@one{#1}%
\def\sf@two{#2}%
\setbox\sf@box\hbox
\bgroup}%
{ \egroup
\ifx\@empty\sf@two\@empty\relax
\def\sf@two{\@empty}
\fi
\ifx\@empty\sf@one\@empty\relax
\subfloat[\sf@two]{\box\sf@box}%
\else
\subfloat[\sf@one][\sf@two]{\box\sf@box}%
\fi}
\makeatother
\begin{document}
\begin{figure}
\renewcommand*\thesubfigure{\arabic{subfigure}}
\textcolor{red}{With} \verb|\renewcommand*\thesubfigure{\arabic{subfigure}}| within the \verb|figure|:
\centering
\begin{SubFloat}
{\label{image1}}
\includegraphics[width=0.4\textwidth]{image1.jpg}
\end{SubFloat}
\qquad
\begin{SubFloat}
{\label{image2}}
\includegraphics[width=0.4\textwidth]{image2.jpg}
\end{SubFloat}
\end{figure}
\begin{figure}
\textcolor{red}{Without} \verb|\renewcommand*\thesubfigure{\arabic{subfigure}}|
\centering
\begin{SubFloat}
{\label{image1}}
\includegraphics[width=0.4\textwidth]{image1.jpg}
\end{SubFloat}
\qquad
\begin{SubFloat}
{\label{image2}}
\includegraphics[width=0.4\textwidth]{image2.jpg}
\end{SubFloat}
\end{figure}
\end{document}
答案2
如果你添加
\renewcommand{\thesubfigure}{\arabic{subfigure}}
在你的序言中,那么子图将被编号为 (1)、(2) 等等。然而 a\ref{label1}
会打印
11
这显然是错误的。因此你还必须添加类似
\makeatletter
\renewcommand{\p@subfigure}{\thefigure--}
\makeatother
这样就\ref{label1}
可以打印
1--1
(根据需要更改分隔符)。
SubFloat
您可以通过几种方式改进对环境的定义。
标准 LaTeX
\makeatletter \newsavebox{\sf@box} \newenvironment{SubFloat}[2][] {\def\sf@one{#1}\def\sf@two{#2}% \begin{lrbox}{\sf@box}}% {\end{lrbox}% \ifx\@empty\sf@one \subfloat[\sf@two]{\box\sf@box}% \else \subfloat[\sf@one][\sf@two]{\usebox\sf@box}% \fi} \makeatother
(您对空虚的测试添加了冗余标记。)
和
xparse
\usepackage{xparse} \makeatletter \newsavebox\sf@box \NewDocumentEnvironment{SubFloat}{ o m } {\begin{lrbox}{\sf@box}} {\end{lrbox}% \IfNoValueTF{#1} {\subfloat[#2]{\usebox{\sf@box}}} {\subfloat[#1][#2]{\usebox{\sf@box}}}% } \makeatother
如您所见,您不需要任何低级测试:如果不存在可选参数,包可以自行区分。