两次尝试均未成功
这里有 2 个不起作用的例子。每次尝试都写在上面% Not works
:
\PassOptionsToPackage{brazil,main=english}{babel}
\documentclass[10pt,a5paper,twoside]{abntex2}
\pdfstringdefDisableCommands{\let\uppercase\relax}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[
style=abnt,
language=english,
backref=true,
backend=biber,
citecounter=true
]{biblatex}
\addbibresource{references.bib}
\usepackage{csquotes}
\makeatletter
\let\orig@listi\@listi
\def\@listi{\orig@listi\topsep=0pt} % Not works
\makeatother
\begin{document}
Test
\begin{citacao}\setlength{\topsep}{0pt} % Not works
Test
\end{citacao}
Test
\end{document}
环境citacao
实现于:
-
\newenvironment*{citacao}[1][default]{% \list{}% \ABNTEXfontereduzida% \addtolength{\leftskip}{\ABNTEXcitacaorecuo}% \item[]% \begin{SingleSpace}% \ifthenelse{\not\equal{#1}{default}}{\itshape\selectlanguage{#1}}{}% }{% \end{SingleSpace}% \endlist}% % ---
两次尝试均成功
这里有两个确实有效的例子。第一个是通过更新环境,另一个是通过在我的计算机上打开 abntex2 文件并更改实现。
我可以改变其实现,添加
{\topsep=0pt}
如下内容:\newenvironment*{citacao}[1][default]{% \list{}{\topsep=0pt}% \ABNTEXfontereduzida% \addtolength{\leftskip}{\ABNTEXcitacaorecuo}% \item[]% \begin{SingleSpace}% \ifthenelse{\not\equal{#1}{default}}{\itshape\selectlanguage{#1}}{}% }{% \end{SingleSpace}% \endlist}%
或者在我的文档中更新环境,如下所示:
\renewenvironment*{citacao}[1][default]{% \list{}{\topsep=0pt}% \ABNTEXfontereduzida% \addtolength{\leftskip}{\ABNTEXcitacaorecuo}% \item[]% \begin{SingleSpace}% \ifthenelse{\not\equal{#1}{default}}{\itshape\selectlanguage{#1}}{}% }{% \end{SingleSpace}% \endlist}%
问题
但我不想完全复制他们的实现,也不想做一个添加的拉取请求{\topsep=0pt}
。我可以做类似下面的事情来修补环境吗?
\pretocmd{\citacao}{\let\oldtopsep\topsep \setlength{\topsep}{0pt}}{}{}
\xapptocmd{\citacaoend}{\let\topsep\oldtopsep}{}{}
为什么这不在帖子开头的代码中?
因为我无法通过手动添加来使它工作,\setlength{\topsep}{0pt}
所以xpatch
如果我不知道如何修补,加载将无济于事。 这些都不起作用:
% First attempt
\makeatletter
\let\orig@listi\@listi
\def\@listi{\orig@listi\topsep=0pt} % Not works
\makeatother
...
% Second attempt
\begin{citacao}\setlength{\topsep}{0pt} % Not works
Test
\end{citacao}
相关问题:
答案1
不仅\topsep
在标准列表环境(itemize、enumerate、description)中设置是硬编码的,而且从这样的环境内部来纠正顶部使用为时已晚,并且更改\topsep
不会影响底部使用。
假设不能直接定制\list
用法,可以尝试这样做:
\documentclass{article}
\usepackage{color}
\begin{document}
\setlength{\topsep}{40pt}% useless
BEFORE
\begin{itemize}
\item \the\topsep
\item A
\item B
\item C
\end{itemize}
AFTER
\color{blue}
BEFORE
\begin{itemize}\kern-\topsep
\makeatletter\advance\@topsepadd-\topsep\makeatother
\item \the\topsep
\item A
\item B
\item C
\end{itemize}
AFTER
\end{document}