
Я знаю оОбъединенный список рисунков и таблиц?, но спрашивающий там требуетодинСхема нумерации рисунков и таблиц, которая мне не нужна. К сожалению, ответ, похоже, зависит от этого предварительного условия.
Мой вопрос касается предполагаемого результата/выходного показателя, например:
Список рисунков и таблиц
Рисунок 1: Карта деревьев в Новом Орлеане ............................................ 3
Рисунок 2: Количество падающих листьев за день ............................. 5
Таблица 1: Виды деревьев........................................................... 12
Рисунок 3: Снижение качества воздуха на 1000 опавших листьев ............ 20
Чтобы это работало, переопределение фигур в таблицы (или наоборот), как предлагается в ссылке выше (т. е. что-то вроде \let\figure\table\let\endtable\endfigure
), не сработает, поскольку это, конечно, приведет к тому, что все фигуры также будут называться «Таблица x»…
решение1
Это работает. Код хорошо прокомментирован, так что я не думаю, что нужны дополнительные комментарии.
\documentclass{article}
% To make the page shorter
\pagestyle{empty}
\textheight3in
% CODE STARTS HERE
% Based on `tocloft` package
\usepackage[titles]{tocloft}
\newlistof{figtab}{loft}{List of Figures and Tables}
\makeatletter
% Change the file extension of both lot and lof
\def\ext@figure{loft}
\def\ext@table{loft}
% Store the original `\thefigure` and `\thetable`
\let\tohe@thefigure\thefigure
\let\tohe@thetable\thetable
% Redefine them to contain a "dummy" `\tohe@list...`
\def\thefigure{\tohe@listfig\tohe@thefigure}
\def\thetable{\tohe@listtab\tohe@thetable}
% Make the two dummy commands truly dummy
\let\tohe@listfig\relax
\let\tohe@listtab\relax
% Store the original `\listoffigtab`
\let\tohe@listoffigtab\listoffigtab
% Redefine it in such a way that the dummy commands insert "Fig." or "Tab." respectively
\def\listoffigtab{%
\begingroup
\def\tohe@listfig{Fig.~}
\def\tohe@listtab{Tab.~}
\tohe@listoffigtab
\endgroup
}
% Change \listoffigtab spacing
\setlength{\cftfignumwidth}{5em}
\setlength{\cfttabnumwidth}{5em}
\setlength{\cftfigindent}{0pt}
\setlength{\cfttabindent}{0pt}
\makeatother
% CODE ENDS HERE
\begin{document}
\listoffigtab
% !b just to make the floats appear on the bottom of the first page
\begin{figure}[!b]
\caption{First}
\end{figure}
\begin{table}[!b]
\caption{Little Table}
\end{table}
\begin{figure}[!b]
\caption{Second}
\end{figure}
\end{document}
решение2
Соответствующая команда — «всегда» \addcontentsline
.
figure
и table
субтитры записываются в файл, расширение которого хранится в \ext@figure
или \ext@table
.
В \@caption
макросе внутреннего процессора (фактически) мы находим:
\long\def\@caption#1[#2]#3{%
\par
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
\begingroup
\@parboxrestore
\if@minipage
\@setminipage
\fi
\normalsize
\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
\endgroup}
Первый параметр \@caption
— это имя поплавка, т.е. figure
или table
(обычно). Это можно использовать и патчить, захватывая table
подписи и redirect
помещая их в файл с расширением \ext@figure
.
\documentclass{book}
\usepackage{caption}
\usepackage{xstring}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@caption}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}{%
\IfStrEq{#1}{table}{% Filter `table` out
\addcontentsline{\csname ext@figure\endcsname}{table}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}%
}{\typeout{Patch success}}{}
\makeatother
\renewcommand{\listfigurename}{List of Figures and Tables}
\begin{document}
\listoffigures
\begin{figure}
\caption{first figure}
\end{figure}
\begin{figure}
\caption{Another first figure}
\end{figure}
\begin{table}
\caption{first table}
\end{table}
\chapter{Another chapter}
\begin{table}
\caption{Yet another table}
\end{table}
\end{document}
Небольшое обновление после того, как yo'
было правильно замечено, что неясно, является ли это таблицей или фигурой в LOFT:
\documentclass{book}
\usepackage{caption}
\usepackage{xstring}
\usepackage{tocloft}
\usepackage{xpatch}
\addtolength{\cftfignumwidth}{30pt}
\addtolength{\cfttabnumwidth}{30pt}
% Prepend the tab or fig number with a `\makebox` (for equal width) and put `Tab.` or `Fig.` in there. Change the names at will
\renewcommand{\cfttabpresnum}{\makebox[30pt][l]{Tab.}}
\renewcommand{\cftfigpresnum}{\makebox[30pt][l]{Fig.}}
\makeatletter
\xpatchcmd{\@caption}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
}{%
\IfStrEq{#1}{table}{%
\addcontentsline{\csname ext@figure\endcsname}{table}%
{\protect\numberline{\csname the#1\endcsname\hfill\hspace{1em}}{\ignorespaces #2}}%
}{%
\IfStrEq{#1}{figure}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname\hfill\hspace{1em}}{\ignorespaces #2}}%
}{%
\addcontentsline{\csname ext@#1\endcsname}{#1}%
{\protect\numberline{\csname the#1\endcsname}{ \ignorespaces #2}}%
}
}%
}{\typeout{Patch success}}{}
\makeatother
\renewcommand{\listfigurename}{List of Figures and Tables}
\begin{document}
\listoffigures
\begin{figure}
\caption{first figure}
\end{figure}
\begin{figure}
\caption{Another first figure}
\end{figure}
\begin{table}
\caption{first table}
\end{table}
\chapter{Another chapter}
\begin{table}
\caption{Yet another table}
\end{table}
\section{First section}
\subsection{First subsection}
\subsubsection{First subsubsection}
\begin{table}
\caption{Yet another another table}
\end{table}
\end{document}