Jak można zmodyfikować środowisko longtable, aby stworzyć środowisko longquadro?
Aby nadać kontekst: mam długą listę zagrożeń, które chcę umieścić w moim dokumencie i udało mi się sprawić, by działała, longtable
jak widać na rys. 1 (jest w języku portugalskim, ponieważ jest to moja rozprawa mistrzowska).

Problem, z którym mam tutaj do czynienia, polega na tym, że longtables są zawsze rozpoznawane jako tabele i chciałbym móc użyć niestandardowej nazwy zmiennoprzecinkowej quadro
, która jest tworzona jako część używanego szablonu, który jest zdefiniowany poniżej:
\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}
Biorąc to pod uwagę, jak mogę edytować longtable
środowisko, aby stworzyć longquadro
środowisko, które nie tylko jest zgodne z tą samą konwencją nazewnictwa, ale także jest zawarte na tych samych listach (jak Lista Quadros).
Odpowiedzi
Ponieważ jest to pytanie uzupełniające, próbując użyć tabeli longtable, aby obejmowała wiele stron, ale nie mogę kontrolować, do której listy trafi , poniższy przykład jest również oparty na odpowiedzi podanej w odpowiedzi (opublikowanej przeze mnie) .
Ogólne notatki:
- Kluczem jest wykonanie łatek lokalnie w środowisku
longquadro
. - Aby uniknąć problemu zagnieżdżania się
\xpatchcmd\cmd{<... containing #1>}{}{<true>}{<false>}
wewnątrz makra,\LT@c@ption
jest bezpośrednio redefiniowana, a nie łatana.
% 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}



To powinno działać:
\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}

Sprawdź zmiany, które wprowadziłem w Twoim kodzie.