![使用 kvoptions 时图形定位](https://linux22.com/image/459613/%E4%BD%BF%E7%94%A8%20kvoptions%20%E6%97%B6%E5%9B%BE%E5%BD%A2%E5%AE%9A%E4%BD%8D.png)
我目前正在写论文,必须使用使用该kvoptions
包的模板。我的问题是,我使用了一个图(由两个子图组成),它会自动放置在章节末尾,后面是我稍后使用的其他图。我尝试使用以下方法强制 LaTex 将其放置在下一页上[p]
。不幸的是,这不起作用,因为它以某种方式被解释为键值对。
\begin{figure}[caption={Figure}, label={fig:h2}]
\centering
\begin{subfigure}[h]{1\textwidth}
{ \includegraphics[width=1\textwidth]{figures/subfigure1.jpg}}
\caption{Subfigure}\label{fig:h2a}
\end{subfigure}
\begin{subfigure}[h]{1\textwidth}
{ \includegraphics[width=1\textwidth]{figures/subfigure2.jpg}}
\caption{Another subfigure}\label{fig:h2b}
\end{subfigure}
\end{figure}
这是图形的代码。我知道标题和标签的传递方式与 LaTex 中常见的方式不同,但这是我在模板中使用的方式。但是,将其更改为标准方式并插入定位命令(如[h]
或)[p]
会导致以下异常:
! Package xkeyval Error: `p' undefined in families `figure'.
See the xkeyval package documentation for explanation.
Type H <return> for immediate help.
...
l.14 \begin{figure}[p]
有人知道如何使用我被迫使用的包并且仍然能够自定义放置图形(我猜还有表格,因为这工作的方式与图形相同)吗?
提前谢谢了!
编辑:
我搜索了模板的代码,发现此部分重新定义figure
:
\define@key{figure}{caption}{\newcommand{\figure@caption}{#1}}
\define@key{figure}{toc}{\newcommand{\figure@toc}{#1}}
\define@key{figure}{label}{\newcommand{\figure@label}{#1}}
\define@key{figure}{placement}{\newcommand{\figure@placement}{#1}}
\define@key{figure}{width}{\newcommand{\figure@width}{#1}}
\define@key{figure}{fit}[]{\newcommand{\figure@fit}{}}
\define@key{figure}{cache}{\newcommand{\figure@cache}{#1}}
\define@key{figure}{cachename}{\newcommand{\figure@cachename}{#1}}
\newcommand{\figure@private@resize@width}{}
\newcommand{\figure@private@resize@proxy}[1]{\resizebox{\figure@private@resize@width}{!}{#1}}
\renewenvironment{figure}[1][]{%
\setkeys{figure}{#1}%
\ifthenelse{\isundefined{\figure@placement}}{%
\newcommand{\figure@internal@placement}{ht}%
}{%
\ifthenelse{\equal{\figure@placement}{exact}}{%
\newcommand{\figure@internal@placement}{!ht}%{H}%
}{%
\ifthenelse{\equal{\figure@placement}{top}}{%
\newcommand{\figure@internal@placement}{t}%
}{%
\ifthenelse{\equal{\figure@placement}{bottom}}{%
\newcommand{\figure@internal@placement}{b}%
}{}%
}%
}%
}%
\expandafter\figure@default\expandafter[\figure@internal@placement]%
\ifthenelse{\isundefined{\figure@cache}}{}{%
% Control caching
\tikzset{external/export next=\figure@cache}%
% Raise a warning if a figure is not cached
% \ifthenelse{\equal{\figure@cache}{false}}{%
% \ClassWarning{isthesis}{Figure \figure@cachename is not cached.}%
% }%
}%
\ifthenelse{\isundefined{\figure@cachename}}{}{%
% Set cache name
\tikzsetnextfilename{\figure@cachename}%
}%
\center%
\ifthenelse{\isundefined{\figure@width}}{}{%
\renewcommand{\figure@private@resize@width}{\figure@width}%
\collect@body\figure@private@resize@proxy%
}%
}{%
\ifthenelse{\isundefined{\figure@toc}}{%
% Without dedicated TOC caption
\caption{\figure@caption\label{\figure@label}}%
}{%
% With dedicated TOC caption
\caption[\figure@toc]{\figure@caption\label{\figure@label}}%
}%
\endcenter%
\endfigure@default%
}
所以我改变了我的形象:
\begin{figure}[caption={Figure}, label={fig:h2}, placement={exact}]
但这不会改变结果。在 pdf 中,该图仍然位于捕获器的末尾。
这是模板使用的类:https://pastebin.com/J4Vq5GpT
这是实际的 .tex 文件:https://pastebin.com/4VwvUDYv
tex 文件使用该类作为文档类并执行所有模板工作并最终加载内容文件。
答案1
代码建议p
不可用,但你可以更改它,更改
\newcommand{\figure@internal@placement}{ht}%
到
\newcommand{\figure@internal@placement}{htp}%
恢复默认位置htp