修改节环境的结尾,但不更改其名称

修改节环境的结尾,但不更改其名称

我想在环境末尾添加某些行为 ( vspace)。我想在不更改环境名称的情况下执行此操作。我在另一个 Stackexchange 答案中找到了以下代码,并使其正常工作:

\let\oldtabular\tabular
\let\endoldtabular\endtabular
\renewenvironment{tabular}{\oldtabular}{\endoldtabular\vspace{.25in}}

但是,当我尝试使用 执行相同操作时section,出现错误:\endsection无法识别该命令。我尝试了许多解决方法,例如定义一个newsection与 相同的新环境section,我认为它应该会给我一个\endnewsection计算结果为 的命令\end{section}。但都不起作用。环境似乎有些不同section

答案1

重要的是,如果后面还有另一部分(或类似部分),则需要添加空间。因此,添加空间是有效的标题,这就是 LaTeX 所做的。所以你只需要增加间距。

例如,可以添加不会影响第一节排版的空格,因为 TeX 知道多种类型的空格。可拉伸的空格、消失的空间或无限延伸的空间 - 这些都是它存在的理由。

这是用于比较的基准

基线

好的。这就是默认设置。现在,让我们在节标题前添加一些间距,这些间距不会出现在第一个节标题之前。

\documentclass{article}
\usepackage{showframe}
\makeatletter
\def\@startsection#1#2#3#4#5#6{% modified from latex.ltx
  \if@noskipsec \leavevmode \fi
  \bigskip % this line added
  \par
  \@tempskipa #4\relax
  \@afterindenttrue
  \ifdim \@tempskipa <\z@
    \@tempskipa -\@tempskipa \@afterindentfalse
  \fi
  \if@nobreak
    \everypar{}%
  \else
    \addpenalty\@secpenalty\addvspace\@tempskipa
  \fi
  \@ifstar
    {\@ssect{#3}{#4}{#5}{#6}}%
    {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
\makeatother
\begin{document}
\section{First section}
\hrule
\section{Later section}
\hrule
\section{Yet another section}
\hrule
\end{document}

修改的

如您所见,如果在节标题前面有内容,则此方法可以成功在节标题前面添加空格,但对于第一个节标题则不会,因为那里没有空格。

您可能想考虑titlesec一个用户友好的界面来自定义分段命令。我个人不喜欢它,但它卖得非常火爆。

答案2

这是无用的代码高尔夫;-)

section没有环境,它是一个命令,因此,\endsection不会自动定义,与已经设置的“真实”环境相反,\newenvironment{foo}那么\endfoo确实存在。

有可能通过在环境的最终代码中使用和省略代码或者说来LaTeX完全滥用的环境设施。\renewenviroment{section}\endsection\def\endsection{}

我推荐这个吗?不!!!!!!!!

不要这样做!

\documentclass{article}



\let\oldsection\section



\begin{document}
Regular sections
\section{Foo}
\hrule
\section{Otherfoo}
\hrule
\renewenvironment{section}{%
  \oldsection%
}{\vspace{.25in}}
\begin{section}{foo}
\end{section}
\hrule
\begin{section}{Otherfoo}
\end{section}
\hrule
\end{document}

在此处输入图片描述

注意:\part\chapter\section等都\subsection不是环境。

相关内容