Wie muss die Longtable-Umgebung möglicherweise geändert werden, um eine Longquadro-Umgebung zu erstellen?

Nov 28 2020

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, longtablewie 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 longtableUmgebung 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

2 muzimuzhiZ Nov 28 2020 at 04:57

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

3 egreg Nov 28 2020 at 04:57

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.