figure 和 table 环境之间的差异非常小——只不过它们使用不同的计数器,并以不同的顺序进行维护。
也就是说,没有什么能阻止您将{tabular}
环境放在 a 中{figure}
,或者将图形放在 a{table}
中,这意味着它们将以相同的顺序结束。这种情况的问题(正如 Joseph Wright 指出的那样)是您必须调整\caption
,所以这不能完美地工作。
在序言中尝试以下操作:
\makeatletter
\newcounter{unisequence}
\def\ucaption{%
\ifx\@captype\@undefined
\@latex@error{\noexpand\ucaption outside float}\@ehd
\expandafter\@gobble
\else
\refstepcounter{unisequence}% <-- the only change from default \caption
\expandafter\@firstofone
\fi
{\@dblarg{\@caption\@captype}}%
}
\def\thetable{\@arabic\c@unisequence}
\def\thefigure{\@arabic\c@unisequence}
\makeatother
然后\ucaption
在您的表格和数字中使用,而不是\caption
(更改名称即兴发挥)。如果您想在其他环境中使用相同的序列(例如,列表?),那么定义\the<foo>
相同的方式。
正如 OP 所发现的那样,我之前在这方面的尝试实际上已经完全失败了:错误是绝对基础的,而不是微不足道的,而且只能很费力地修复。
(对于爱好者来说,它的出现是因为\advance
命令是在 TeX 的肠道中处理的,但是 .lof、.lot和 .aux文件的内容在 TeX 的嘴里是固定的,在扩展时,因此写入文件的内容是什么随机值\@tempcnta
当时\caption
被调用,忽略\advance
计算,然后尽职尽责地写入文件,然后被忽略。Doh:我知道多久了,但从未内化它!?)
尽职尽责地保留先前的尝试(理由可能是指导性错误):
没问题:尝试将以下内容放在序言中:
\makeatletter
\def\tableandfigurenum{\@tempcnta=0
\advance\@tempcnta\c@figure
\advance\@tempcnta\c@table
\@arabic\@tempcnta}
\let\thetable\tableandfigurenum
\let\thefigure\tableandfigurenum
\makeatother
...然后正常使用{table}
and{figure}
环境。标题将具有正确的“表格/图形”文本,但它们将共享一个编号序列。
请注意,此示例在 listoffigures/listoftables 中的数字是错误的,但是 (a) 你说你不关心这个,(b) 它是可以修复的,尽管可能有点繁琐,并且 (c) 生活很艰难!