将所有浮动元素放在最后,不改变编号

将所有浮动元素放在最后,不改变编号

我想将一些浮点数(特别是代码清单)放在文档末尾的某个部分中,而不影响编号。目前,我已在各部分内对它们进行了编号,因此在第 1 部分中,所有清单都被称为程序 1.1计划 1.2ETC。

有没有办法在末尾创建一个部分(如附录),将所有程序浮点放在其中,而不改变它们的编号?理想情况下,我希望有

第 1 部分
第 1 节中的部分文本以及对计划 1.1 和 1.2 的引用。

第 2 部分
显然,程序 2.1 是本节中显示的唯一代码。

...

附录 A
程序1.1:

对于 i = 1:n
    做东西();
结尾

计划1.2:

% 这个程序不做任何事情

ETC...

更新:
在有人因为我没有准确说明程序是如何定义的而枪毙我之前,我先来介绍一下它的工作原理:

% In the preamble
\usepackage{listings}
\usepackage{float}
\newfloat{program}{tbphH}{lop}
\floatname{program}{Program}

\newcommand{\codefrom}[2][Matlab]
{
\begin{program}[hbt]
    \lstinputlisting[language=#1]{#2}
    \caption{#2}
    \label{#2}
\end{program}
}

% In the document
\codefrom{alocalfile.m}

答案1

因此,这是我的候选解决方案,其基本内容是手动将所有浮点数移动到末尾,然后暂时侵入计数器section以显示所需的数字。

\documentclass{article}

\usepackage{float}
\newfloat{program}{tbphH}{lop}[section]
\floatname{program}{Program}

\newcounter{savesection}
\newenvironment{fromsection}[1]{%
  \setcounter{savesection}{\value{section}}%
  \setcounter{section}{#1}%
  \renewcommand{\thesection}{\arabic{section}}}
  {\setcounter{section}{\value{savesection}}}

\newcommand{\codefrom}[1]{%
\begin{program}[hbt]
    \caption{#1}
    \label{#1}
\end{program}}

\begin{document}

\section{Introduction}
Please see Program~\ref{dostuff} and \ref{donothing}.

\section{Another thing}
Also see Program~\ref{onlyone}.

\appendix
\section{Appendix}

\begin{fromsection}{1}
\codefrom{dostuff}
\codefrom{donothing}
\end{fromsection}

\begin{fromsection}{2}
\codefrom{onlyone}
\end{fromsection}

\section{Yet another appendix}

\end{document}

由于浮动元素实际上不再需要“浮动”,因此我建议将其位置改为“H”,而不是“hbt”。此外,如果您尝试将其与 hyperref 一起使用,我不知道这会导致什么可怕的事情。

答案2

这里有一个技巧可能适合您的需要。希望您不介意浮动出现在自己的页面上。请参阅常见问题解答关于浮点数的解释,请参见此处。代码未注释,但您应该能够理解其要点。另外,请注意,使用此技术,您无法拥有超过 36 个浮点数。

\documentclass{article}
\usepackage{morefloats}
\usepackage{chngcntr}
\counterwithin{figure}{section}

\newcommand\allowfloats{%
    \renewcommand{\topfraction}{.85}
    \renewcommand{\bottomfraction}{.7}
    \renewcommand{\textfraction}{.15}
    \renewcommand{\floatpagefraction}{.66}
    \setcounter{topnumber}{0}
    \setcounter{bottomnumber}{0}
    \setcounter{totalnumber}{0}
}

\newcommand\dontallowfloats{%
    \renewcommand{\topfraction}{.01}
    \renewcommand{\bottomfraction}{.01}
    \renewcommand{\textfraction}{.99}
    \renewcommand{\floatpagefraction}{.99}
    \setcounter{topnumber}{9}
    \setcounter{bottomnumber}{9}
    \setcounter{totalnumber}{20}
}

\usepackage{lipsum}
\newcommand\textandfloat{%
  \lipsum[1-2]
  \par
  \begin{figure}[p]
    \centering\rule{5cm}{5cm}
    \caption{Black square.}
  \end{figure}
}

\begin{document}

\dontallowfloats
\section{Begin document}
\textandfloat\textandfloat
\textandfloat\textandfloat
\section{Middle}
\textandfloat\textandfloat
\textandfloat\textandfloat
\section{End document}
\textandfloat\textandfloat
\textandfloat\textandfloat

\allowfloats
\section{Floats}
Here are all the floats.

\end{document}

答案3

Juan A. Navarro,我该如何修改您的解决方案,使其适用于数字,包括数字列表?我已经尝试了该包端浮点但遇到了一些问题;这就是为什么我正在寻找一种替代方法,将所有图表放在文档末尾但在补充之前的单独章节中。

相关内容