Wie muss die Longtable-Umgebung möglicherweise geändert werden, um eine Longquadro-Umgebung zu erstellen?
Um einen Zusammenhang zu geben: Ich habe eine lange Liste von Risiken, die ich in mein Dokument aufnehmen möchte, und habe es geschafft, dass es funktioniert, longtable
wie in Bild 1 zu sehen ist (es ist auf Portugiesisch, weil es die Disstertaion meines Meisters ist).

Das Problem, mit dem ich hier konfrontiert bin, ist, dass Longtables immer als Tabellen erkannt werden und ich einen benutzerdefinierten Float mit dem Namen verwenden möchte quadro
, der als Teil der von mir verwendeten Vorlage erstellt wird, die unten definiert ist:
\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}
Wie kann ich die longtable
Umgebung bearbeiten , um eine Umgebung zu erstellen longquadro
, die nicht nur der gleichen Namenskonvention folgt, sondern auch in den gleichen Listen enthalten ist (wie die Liste der Quadros).
Antworten
Da dies eine Folgefrage des Versuchs ist, Longtable zu verwenden, um es über mehrere Seiten zu erstrecken, aber nicht steuern kann, zu welcher Liste es geht , basiert das folgende Beispiel auch auf der in der Antwort (von mir gepostet) dort angegebenen .
Allgemeine Hinweise:
- Der Schlüssel besteht darin, das Patchen lokal in der Umgebung durchzuführen
longquadro
. - Um das Problem der Verschachtelung
\xpatchcmd\cmd{<... containing #1>}{}{<true>}{<false>}
in einem Makro zu vermeiden ,\LT@c@ption
wird es direkt neu definiert und nicht gepatcht.
% 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}



Das sollte funktionieren:
\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}

Überprüfen Sie die Änderungen, die ich an Ihrem Code vorgenommen habe.