Comment l'environnement longtable pourrait-il être modifié pour créer un environnement longquadro?
Pour donner un peu de contexte: j'ai une longue liste de risques que je veux mettre dans mon document et j'ai réussi à le faire fonctionner en utilisant longtable
comme on peut le voir sur pic1 (c'est en portugais car c'est ma disstertaion de maîtres).

Le problème auquel je suis confronté ici est que les tables longues sont toujours reconnues en tant que tables et je voudrais pouvoir utiliser un flottant personnalisé nommé quadro
, qui est créé dans le cadre du modèle que j'utilise et qui est défini ci-dessous:
\newcommand{\listquadroname}{Lista de quadros}
\newcommand{\quadroname}{Quadro}
\newcommand{\quadrorefname}{Quadro}
\newcommand{\chartautorefname}{Quadro}
\addto\captionsenglish{% ingles
\renewcommand{\listquadroname}{List of charts}
\renewcommand{\quadroname}{Chart}
\renewcommand{\quadrorefname}{Chart}
\renewcommand{\chartautorefname}{Chart}
}
\newfloat{quadro}{htbp}{loq}[chapter]
\floatname{quadro}{\quadroname}
\floatstyle{plaintop}
\restylefloat{quadro}
\newlistof{listofquadros}{loq}{\listquadroname}
\newlistentry{quadro}{loq}{0}
\renewcommand{\thequadro}{\thechapter.\@arabic\c@quadro}
\setfloatadjustment{quadro}{\centering}
\renewcommand{\cftquadroname}{\quadroname\space}
\renewcommand*{\cftquadroaftersnum}{\hfill\textendash\hfill}
\begin{quadro}[htb]
\caption{Editores de Texto Livres}
\label{quadro:editores_texto_livres}
\centering
\begin{tabular}{|l|l|r|} \hline
Editor & Multiplataforma & Específico para Latex \\ \hline
Kwriter & Sim & Não \\
Texmaker & Sim & Sim \\
Kile & Sim & Sim \\
Geany & Sim & Não \\ \hline
\end{tabular}
\end{quadro}
Cela étant dit, comment pourrais-je modifier l' longtable
environnement pour créer un longquadro
environnement qui non seulement suit la même convention de dénomination, mais qui est également inclus dans les mêmes listes (comme List of Quadros).
Réponses
Comme il s'agit d'une question de suivi: Essayer d'utiliser la table longue pour la faire s'étendre sur plusieurs pages mais ne peut pas contrôler à quelle liste elle va , l'exemple suivant est également basé sur celui donné dans la réponse (publiée par moi-même) là .
Notes générales:
- La clé est de faire le correctif localement dans l'environnement
longquadro
. - Pour éviter le problème de l'imbrication
\xpatchcmd\cmd{<... containing #1>}{}{<true>}{<false>}
dans une macro, elle\LT@c@ption
est directement redéfinie plutôt que corrigée.
% for https://tex.stackexchange.com/q/572654/79060
\documentclass{report}
\usepackage[strut=off]{caption}
\usepackage{float}
\usepackage{longtable}
\usepackage{xpatch}
\newcommand{\listquadroname}{Lista de quadros}
\newcommand{\quadroname}{Quadro}
\newcommand{\quadrorefname}{Quadro}
\newcommand{\chartautorefname}{Quadro}
\newfloat{quadro}{htbp}{loq}[chapter]
\floatname{quadro}{\quadroname}
\floatstyle{plaintop}
\restylefloat{quadro}
\makeatletter
\renewcommand{\thequadro}{\thechapter.\@arabic\c@quadro}
% define env "longquadro"
\newenvironment{longquadro}
{\patch@longtable@i\patch@longtable@ii
\longtable}
{\endlongtable}
% patching codes base on https://tex.stackexchange.com/a/548021
\newcommand\patch@longtable@i{%
\xpatchcmd\ltcaption@ORI@LT@array
{\refstepcounter{table}}
{\refstepcounter{quadro}}
{}{\fail}%
}
% since "\@ifpackageloaded" is preamble only, the patching codes have to
% be split in two macros
\@ifpackageloaded{caption}{
% handle compatibility with caption package
\newcommand\patch@longtable@ii{%
\renewcommand\LTcaptype{quadro}%
}
}{
\newcommand\patch@longtable@ii{%
% derectly redefine "\LT@c@ption"
\def\LT@c@ption##1[##2]##3{%
\LT@makecaption##1\fnum@quadro{##3}%
\def\@tempa{##2}%
\ifx\@tempa\@empty\else
{\let\\\space
\addcontentsline{loq}{quadro}{\protect\numberline{\thequadro}{##2}}}%
\fi}%
}
}
\makeatother
\begin{document}
\listoftables
\listof{quadro}{\listquadroname}
\chapter{title}
\begin{table}[htb]
\caption{This is s table title}
\end{table}
\begin{quadro}[htb]
\caption{This is a quadro title}
\end{quadro}
\begin{longtable}{cc}
\caption{This is a longtable title} \\
a & b \\
c & d
\end{longtable}
\begin{longquadro}{cc}
\caption{This is a longquadro title} \\
a & b \\
c & d
\end{longquadro}
\end{document}



Cela devrait fonctionner:
\documentclass{abntex2}
\usepackage{float}
\usepackage{longtable}
\usepackage{xpatch}
%%changed to make generic
\providecommand{\listquadroname}{}
\providecommand{\quadroname}{}
\providecommand{\quadrorefname}{}
\providecommand{\chartautorefname}{}
\addto\captionsbrazil{%
\renewcommand{\listquadroname}{Lista de quadros}%
\renewcommand{\quadroname}{Quadro}%
\renewcommand{\quadrorefname}{Quadro}%
\renewcommand{\chartautorefname}{Quadro}%
}
\addto\captionsenglish{%
\renewcommand{\listquadroname}{List of charts}%
\renewcommand{\quadroname}{Chart}%
\renewcommand{\quadrorefname}{Chart}%
\renewcommand{\chartautorefname}{Chart}%
}
%%%
\newfloat{quadro}{htbp}{loq}% <--- changed
\counterwithin{quadro}{chapter}% <--- added
\floatname{quadro}{\quadroname}
\floatstyle{plaintop}
\restylefloat{quadro}
\newlistof{listofquadros}{loq}{\listquadroname}
\newlistentry{quadro}{loq}{0}
\renewcommand{\thequadro}{\thechapter.\arabic{quadro}}% <--- changed
\setfloatadjustment{quadro}{\centering}
\renewcommand{\cftquadroname}{\quadroname\space}
\renewcommand*{\cftquadroaftersnum}{\hfill\textendash\hfill}
\makeatletter
\newenvironment{longquadro}
{%
\let\c@table\c@quadro\let\thetable\thequadro
\def\fnum@table{\quadroname{ }\thequadro}%
\xpatchcmd{\NRorg@LT@c@ption}{{lot}{table}}{{loq}{quadro}}{}{}%
\xpatchcmd{\NRorg@LT@c@ption}{{lot}{table}}{{loq}{quadro}}{}{}%
\renewcommand{\theHtable}{quadro\thechapter.\arabic{quadro}}%
\longtable
}
{\endlongtable}
\makeatother
\begin{document}
\listofquadros
\chapter{First}
\begin{quadro}[htp]
\caption{Test}
\end{quadro}
\begin{longquadro}{|l|l|r|}
\caption{Editores de Texto Livres}
\label{quadro:editores_texto_livres}\\
\hline
Editor & Multiplataforma & Específico para Latex \\ \hline
Kwriter & Sim & Não \\
Texmaker & Sim & Sim \\
Kile & Sim & Sim \\
Geany & Sim & Não \\ \hline
\end{longquadro}
\end{document}

Vérifiez les modifications que j'ai apportées à votre code.