Comment l'environnement longtable pourrait-il être modifié pour créer un environnement longquadro?

Nov 28 2020

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 longtablecomme 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' longtableenvironnement pour créer un longquadroenvironnement 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

2 muzimuzhiZ Nov 28 2020 at 04:57

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@ptionest 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}

3 egreg Nov 28 2020 at 04:57

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.