longquadro 환경을 만들기 위해 longtable 환경을 어떻게 수정해야합니까?
Nov 28 2020
컨텍스트를 제공하기 위해 : 내 문서에 넣고 싶은 위험 목록이 길고 longtable
pic1에서 볼 수있는 것처럼 작동하도록 관리했습니다 (내 마스터 배포이므로 포르투갈어로 표시됨).

여기서 내가 직면 한 문제는 longtables는 항상 테이블로 인식되며 quadro
아래에 정의 된 템플릿의 일부로 생성 된 사용자 지정 float를 사용할 수 있기를 원한다는 것입니다 .
\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}
즉 , 동일한 명명 규칙을 따를뿐만 아니라 동일한 목록 (예 : Quadros 목록)에 포함 되는 longtable
환경을 만들기 위해 longquadro
환경을 편집하려면 어떻게해야합니까 ?
답변
2 muzimuzhiZ Nov 28 2020 at 04:57
이것은 Longtable을 사용하여 여러 페이지에 걸쳐 있도록 시도 하는 후속 질문 이지만 어떤 목록으로 이동하는지 제어 할 수 없기 때문에 다음 예제도 답변 (내가 게시 한)에 제공된 것을 기반으로합니다. .
일반 사항 :
- 핵심은 환경 내에서 로컬로 패치를 수행하는 것
longquadro
입니다. \xpatchcmd\cmd{<... containing #1>}{}{<true>}{<false>}
매크로 내부 의 중첩 문제를 방지하기 위해\LT@c@ption
패치가 아닌 직접 재정의됩니다.
% 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
이것은 작동합니다.
\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}

코드 변경 사항을 확인하십시오.