我想要一个包含数字的简写命令。
- 描述和文件名是必填项
- 简短标题可选
- 可选参数可以传递给
\includegraphics
这是我想写的片段:
\newcommand\figH[4][]{
\begin{figure}[H]
\begin{center}
\caption[#4]{\label{#2}#3}
\includegraphics[#1]{#2}
\end{center}
\end{figure}%
}
\figH[width=\linewidth]{filename}{description}{short-description}
\figH{filename}{description}{short-description}
\figH{filename}{description}
我仍然对命令中的可选参数感到困惑。
答案1
除了定义许多参数之外,您还可以定义一个 key=value 接口来设置label
、short
-caption 或place
float 的位置。expkv-cs
您可以使用...
处理程序将所有未知的 key=value 对(以及没有值的键)放在一个参数中,然后将它们转发给\includegraphics
(产生一个可选的 key=value 参数和两个必需参数)。
\documentclass{article}
\usepackage{graphicx}
\usepackage{float}
\usepackage{expkv-cs}
\makeatletter
\newcommand\fig[2][]{\fig@kv{short={#2},#1}{#2}}
\ekvcSplitAndForward\fig@kv\fig@out
{
% defaults here
short = {}% will get set for each call to match the caption argument
,internal-label = {} % empty, not for direct use (easier that way)
,place = tbp
,...
}
\ekvcSecondaryKeys\fig@kv
{
nmeta H = place=H % shortcut
,meta label = internal-label=\label{#1} % wraps \label around the value
% add more keys you want to be handled special here
}
\newcommand\fig@out[6]
{%
\begin{figure}[#3]
\centering
\caption[{#1}]{#5#2}%
\includegraphics[{#4}]{#6}%
\end{figure}%
}
\makeatother
\usepackage{duckuments}
\begin{document}
\listoffigures
\blindduck
\fig[H]{A lovely duck}{example-image-duck}
\fig[width=3cm, short=Ducky]{A frightening duck!}{example-image-duck-portrait}
\end{document}
答案2
不要。你会失去灵活性,同时输入速度也不会提高多少,因为你总是必须记住参数的顺序。
[H]
此外,应避免使用此选项,因为它会导致几个分页问题,而标准可选参数则figure
试图克服这些问题。此外center
也不是最好的,\centering
声明是最好的。
让我们看看你如何可能你需要
- 浮动位置的可选参数
- “短”标题的可选参数
- 标题的强制参数
- 标签的强制性参数
- 图形参数的可选参数
- 图像文件的强制参数。
放置两个连续的可选参数来处理不同的方面是不好的;所以我们可以在第二个位置插入标签。因此我们需要
\NewDocumentCommand{\addfigure}{
O{htp} % the suggested default
m % the label
O{#4} % the short caption (defaults to the long one)
m % the caption
O{} % the options to \includegraphics
m % the file name
}{%
\begin{figure}[#1]
\centering
\caption[#3]{\label{#2}#4}
\includegraphics[#5]{#6}
\end{figure}
}
让我们看看可能的调用:
\addfigure{fig:A}[short desc]{long caption}[width=\columnwidth]{filename}
\addfigure{fig:B}[short desc]{long caption}{filename}
\addfigure[!htbp]{fig:C}{long caption}[width=6cm]{filename}
比较最后一项与
\begin{figure}[!htpb]
\centering
\caption{long caption\label{fig:C}}
\includegraphics[width=6cm]{filename}
\end{figure}
并决定哪一个更清晰。
答案3
下面的定义\figH
的使用\NewDocumentCommand
,有五个参数,如注释中所述。这里\NewDocumentCommand
比 更好\newcommand
,因为您可以轻松拥有多个可选参数。
这可以作为您的起点,请随意编辑和扩展它以满足您的需要。
\documentclass{article}
\usepackage{graphicx,float}
\usepackage{geometry}
\NewDocumentCommand \figH { O{} m O{} m o }
% #1 = options for \includegraphics (optional, initial to be empty)
% #2 = figure name
% #3 = short caption (optional, initial to be empty)
% #4 = caption
% #5 = label (optional, initial to be NoValue)
{%
\begin{figure}[H]%
\begin{center}%
\caption[#3]{\IfValueT{#5}{\label{#5}}#4}%
\includegraphics[#1]{#2}%
\end{center}%
\end{figure}%
}
\begin{document}
\figH[width=\linewidth]{example-image-a}{description}[fig:A]
\figH{example-image-b}[short-description]{description}[fig:B]
\figH{example-image-c}{description}
\end{document}