带有 endash 分隔符的自定义 listof

带有 endash 分隔符的自定义 listof

我在用着floatrow创建一个新环境Quadros(即框架),但尽管在标题中显示了正确的分隔符,但 Quadros 列表仍然显示空白。只需要在浮点数后添加一个尾号。我确实搜索了类似问题但找不到任何可以解决我的问题的东西。

编辑2:为了跟上我的论文布局,我将 C. Hupfer 解决方案融入其中:

\DeclareCaptionListFormat{quadro}{\llap{{#1}}{#2}\hfill\rlap{\textendash}\hfill\hspace{0.5em}}

显示内容与图形的默认列表完全相同,除了一个或两个像素之外,但这可能是由于微类型或仅仅是不同的字符造成的。

编辑:C. Hupfer 的当前解决方案:

\makeatletter
\renewcommand*{\l@quadro}{\@dottedtocline{1}{1.5em}{1.7em}}
\makeatother

导致我遇到两位数浮点数的问题:

在此处输入图片描述

\hspace{0.15em}我尝试在之前添加一个\textendash,但也无法正常工作。

浮点数后结束

这是我的 MWE:

\documentclass{memoir}
\usepackage[T1]{fontenc}
\let\newfloat\relax                     % % % % % % % % % % % % % % % % % % % % % %
\let\tmp\newinsert                      % 
\let\newinsert\newbox                   % This is to fix some bug of floatrow
\usepackage{floatrow}                   %
\let\newinsert\tmp                      % % % % % % % % % % % % % % % % % % % % % %
\floatsetup{objectset=centering,capposition=top}
\usepackage{caption}

\DeclareNewFloatType{quadro}{placement=p,fileext=frm,name=Quadro}
\newcommand*{\quadroautorefname}{quadro}
\captionsetup[quadro]{
   name=Quadro,
   justification=justified,
   position=above,
   skip=\onelineskip,
   width=0.95\linewidth,
   labelsep=endash, %% ABNT thing requires to use dash
   labelfont={small},
   font={footnotesize},
}
\begin{document}

\begingroup
\let\oldnumberline\numberline
\renewcommand{\numberline}{Quadro~\oldnumberline}
\listof{quadro}{ Lista de Quadros}
\endgroup

    \begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
\begin{quadro}
\caption{bbb}\label{quad:b}
content...
\end{quadro}

\begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
\begin{quadro}
\caption{bbb}\label{quad:b}
content...
\end{quadro}
\begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
\begin{quadro}
\caption{bbb}\label{quad:b}
content...
\end{quadro}
\begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
\begin{quadro}
\caption{bbb}\label{quad:b}
content...
\end{quadro}
\begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
\begin{quadro}
\caption{bbb}\label{quad:b}
content...
\end{quadro}
\begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
\end{document}

答案1

安装程序包list-of中内置了对特殊格式的支持caption

\DeclareCaptionListFormat{quadro}{#1\textendash\ #2}

listformat=quadro使用\captionsetup

名称quadro是任意的(只要它不是figure等)

由于四位数后的间距可能太宽,因此\l@quadro必须重新定义宏。

\makeatletter
\renewcommand*{\l@quadro}{\@dottedtocline{1}{1.5em}{1.7em}}
\makeatother

最后一个参数(带有 的参数1.7em)包含numwidth,即数字部分的宽度。通常,这是2.3em,我将其缩小为1.7em

    \documentclass{memoir}
    \usepackage[T1]{fontenc}
    \let\newfloat\relax                     % % % % % % % % % % % % % % % % % % % % % %
%    \let\tmp\newinsert                      % 
%    \let\newinsert\newbox                   % This is to fix some bug of floatrow
    \usepackage{floatrow}                   %
%    \let\newinsert\tmp                      % % % % % % % % % % % % % % % % % % % % % %
    \floatsetup{objectset=centering,capposition=top}



\usepackage{caption}

\DeclareNewFloatType{quadro}{placement=p,fileext=frm,name=Quadro}
\DeclareCaptionListFormat{quadro}{#1#2 \textendash}

\newcommand*{\quadroautorefname}{quadro}
\captionsetup[quadro]{
   name=Quadro,
   justification=justified,
   position=above,
   skip=\onelineskip,
   width=0.95\linewidth,
   labelsep=endash, %% ABNT thing requires to use dash
   labelfont={small},
   font={footnotesize},
   listformat=quadro
}


\begin{document}

\begingroup
\let\oldnumberline\numberline
\makeatletter
\renewcommand*{\l@quadro}{\@dottedtocline{1}{1.5em}{1.7em}}
\makeatother
\renewcommand{\numberline}{Quadro~\oldnumberline}
\listof{quadro}{ Lista de Quadros}
\endgroup

\begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
\begin{quadro}
\caption{bbb}\label{quad:b}
content...
\end{quadro}
\end{document}

在此处输入图片描述

更新

\llap我在列表格式的定义中添加了一条语句。 那么\renewcommand{\l@quadro}... 就不再是必要的了,因为将 quadro 数字与右边界对齐需要比 更多的水平间距1.7em

\documentclass{memoir}
\usepackage[T1]{fontenc}
\let\newfloat\relax                     % % % % % % % % % % % % % % % % % % % % % %
\usepackage{floatrow}                   %
\floatsetup{objectset=centering,capposition=top}



\usepackage{caption}

\DeclareNewFloatType{quadro}{placement=p,fileext=frm,name=Quadro}

\DeclareCaptionListFormat{quadro}{\hfill#1\hfill\llap{#2}\hfill\textendash\hfill}

\newcommand*{\quadroautorefname}{quadro}
\captionsetup[quadro]{
   name=Quadro,
   justification=justified,
   position=above,
   skip=\onelineskip,
   width=0.95\linewidth,
   labelsep=endash, %% ABNT thing requires to use dash
   labelfont={small},
   font={footnotesize},
   listformat=quadro
}


\begin{document}

\begingroup
\let\oldnumberline\numberline
\makeatletter
%\renewcommand*{\l@quadro}{\@dottedtocline{1}{1.5em}{2.7em}}
\makeatother
\renewcommand{\numberline}{Quadro~\oldnumberline}
\listof{quadro}{ Lista de Quadros}
\endgroup


\begin{quadro}
\caption{aaa}\label{quad:a}
content...
\end{quadro}
  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

  \begin{quadro}
  \caption{bbb}%\label{quad:\x}
  content...
\end{quadro}

\end{document}

在此处输入图片描述

相关内容