Как последовательно пронумеровать числа с плавающей запятой в LaTeX?

У меня есть документ LaTeX, в котором я хотел бы, чтобы нумерация чисел с плавающей запятой (таблиц и рисунков) была одной числовой последовательностью от 1 до x, а не двумя последовательностями в зависимости от их типа. Я тоже не использую списки рисунков или таблицы, да и в этом нет необходимости.

Мой класс документов - это отчет, и обычно мои поплавки имеют такие подписи:

\caption{Breakdown of visualisations created.}
\label{tab:Visualisation_By_Types}

person Mr Morgan    schedule 26.06.2010    source источник


Ответы (4)


Различия между средой рисунка и таблицы очень незначительны - немногим больше, чем у них, использующих разные счетчики и поддерживаемых в отдельных последовательностях.

То есть ничто не мешает вам поместить вашу {tabular} среду в {figure} или вашу графику в {table}, что будет означать, что они окажутся в той же последовательности. Проблема с этим случаем (как отмечает Джозеф Райт) в том, что вам придется отрегулировать \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 (измените имя ad lib). Если вы хотите использовать эту же последовательность в других средах (например, в списках?), Определите \the<foo> таким же образом.

Моя более ранняя попытка на самом деле полностью сломана, как заметил ОП: ошибка, связанная с ошибкой, вместо того, чтобы быть тривиальной и ее сложно исправить, является абсолютно фундаментальной (хо, гул).

(Для фанатов это происходит потому, что команды \advance обрабатываются внутренним пространством TeX, но содержимое файлов .lof, .lot, и .aux фиксируется во рту TeX во время расширения, поэтому в файлы было записано то случайное значение, которое \@tempcnta имело в момент вызова \caption, игнорируя \advance вычисления, которые затем покорно записывались в файл, а затем игнорировались. Дох: как долго я это знаю, но никогда не усваивал! ?)

Последовательное удержание предыдущей попытки (на том основании, что это может быть поучительно неправильным):

Нет проблем: попробуйте вставить в преамбулу следующее:

\makeatletter
\def\tableandfigurenum{\@tempcnta=0
    \advance\@tempcnta\c@figure
    \advance\@tempcnta\c@table
    \@arabic\@tempcnta}
\let\thetable\tableandfigurenum
\let\thefigure\tableandfigurenum
\makeatother

... а затем используйте среды {table} и {figure} как обычно. Подписи будут иметь правильный текст «Таблица / Рисунок», но они будут иметь единую последовательность нумерации.

Обратите внимание, что в этом примере неверно указаны числа в listoffigures / listoftables, но (а) вы говорите, что вам это наплевать, (б) это поправимо, хотя, вероятно, немного неудобно, и (в) жизнь тяжелая!

person Norman Gray    schedule 28.06.2010
comment
Спасибо. В некоторой степени это действительно работает. В моей статье большое количество таблиц и рисунков, и я обнаружил, что нумерация перескакивает с 14 на 16, а ссылки на таблицы и рисунки в основном тексте статьи не совпадают, например На рисунке 49 отображается ... Но на самом деле рисунок 49 - это рисунок 11? Я предполагаю, что не будет внесено никаких изменений в ссылки на основной текст, а также в текст заголовков или меток таблиц и рисунков. - person Mr Morgan; 29.06.2010
comment
Думаю, я нашел способ получше. Проблемы, с которыми я столкнулся, заключаются в следующем: (1) он не работает с cleveref (который смотрит на тип счетчика, чтобы различать) и (2) он нумерует вещи непрерывно, а не в пределах главы. Вместо этого я использую пакет aliascnt, затем \let\c@table\@undefined, а затем \newaliascnt{table}{figure}. Повторите эти действия с каждым счетчиком, который вы хотите ввести, в последовательности цифр, например. \let\c@thm\@undefined, \newaliascnt{thm}{figure}. (Конечно, вам нужно \makeatletter, \makeatother вокруг \let.) Подходит для меня. Кто-нибудь может придумать какие-нибудь проблемы? - person EvanED; 16.07.2013

Быстрый способ сделать это - поставить \addtocounter{table}{1} после каждой цифры и \addtocounter{figure}{1} после каждой таблицы.

Это некрасиво, и в более длинном документе вы, вероятно, захотите либо включить это в свою таблицу стилей или шаблон, либо воспользоваться решением Cristobalito по связыванию счетчиков.

person Andy    schedule 27.06.2010

Я не могу вспомнить синтаксис, но вы, по сути, ищете счетчики. Загляните здесь в раздел пользовательских поплавков. . Назначьте счетчики для таблиц и рисунков одному и тому же объекту, и он должен работать.

person cristobalito    schedule 26.06.2010

Я бы просто использовал один тип float (скажем, 'figure'), а затем использовал бы пакет caption, чтобы удалить автоматически добавленный текст "Figure" из подписи и обработать его вручную.

person Joseph Wright    schedule 27.06.2010