我想在环境末尾添加某些行为 ( 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
不是环境。