减少章节前的空间适用于英语,但不适用于匈牙利语 babel 包

减少章节前的空间适用于英语,但不适用于匈牙利语 babel 包

我最近在写论文,我想减少章节前的空格。我找到了解决方案,但它对我来说不起作用\usepackage[magyar]{babel}

我使用以下代码:

\documentclass[a4paper,12pt]{report}

% Switch between these babel languages to see the difference
\usepackage[magyar]{babel}
%\usepackage[english]{babel}

\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[margin=2.5cm]{geometry}

\usepackage{showframe,lipsum}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\@makechapterhead}{\vspace*{50\p@}}{}{}{}
\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}
\makeatother

\title{Reducing space before chapter}

\begin{document}

\chapter{Lorem ipsum}

\lipsum[1]

\chapter*{Lorem ipsum}

\lipsum[1]

\end{document}

你能帮助我吗?

答案1

您可以放置​​代码

\makeatletter
\patchcmd{\@makechapterhead}{\vspace*{50\p@}}{}{}{}
\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}
\makeatother

立即地 \begin{document}补丁必须满足以下要求才能生效。更正式的方法是与babelafterextras

\makeatletter
\AddBabelHook{patches}{afterextras}{%
  \patchcmd{\@makechapterhead}{\vspace*{50\p@}}{}{}{}
  \patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}
}
\makeatother

原因是某些语言重新格式化l语言d定义f文件(或.ldf)中的分段单元,并将它们作为称为的“事件”的一部分执行extras(具体来说,因为magyar这包含在magyar.ldf将是\extrasmagyar)。因此,即使\patchcmd来自etoolbox可能在前导码内工作,或者甚至在事件期间\AtBeginDocument被覆盖。因此事件是修补的合适位置。babelextrasafterextras

相关内容