使用 kvoptions 时图形定位

使用 kvoptions 时图形定位

我目前正在写论文,必须使用使用该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

相关内容