续订\rule
后\section
该如何设置?\section
这不起作用:
\let\oldsection\section
\renewcommand{\section}{%
\newpage%
\oldsection%
\rule{\textwidth}{4pt}%
}
这可行,但该行在标题之前:
\let\oldsection\section
\renewcommand{\section}{%
\newpage%
\rule{\textwidth}{4pt}%
\oldsection%
}
答案1
原因是因为\section
需要一些参数,并且必须先读取这些参数才能放置水平线。您可以使用xparse
首先帮助捕捉参数,然后决定要执行的分段类型:
\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{xparse}% http://ctan.org/pkg/xparse
\makeatletter
\NewDocumentCommand{\Section}{s o m}{%
\clearpage
\IfBooleanTF{#1}
{% \Section*
\section*{#3}%
}{% \Section
\IfNoValueTF{#2}
{% \Section[]{}
\section[#2]{#3}%
}{% \Section{}
\section{#3}%
}%
}%
\noindent\rule{\textwidth}{4pt}\par\noindent
}
\makeatother
\begin{document}
\Section{A section}\lipsum[1-3]
\Section{Another section}\lipsum[1-3]
\end{document}
宏{s o m}
标识符请求一个(可选)s
tar、一个o
可选参数和一个必要参数。因此,使用条件和进行相应分支m
的形式和。\Section*[..]{...}
\IfBooleanTF
\IfNoValueTF
当然,这只是一个非常简单的例子。你可以尝试调整水平线的间距。此外,其他软件包允许自动为你完成此类操作,例如titlesec
或者sectsty
, 例如。
答案2
你是指这样的吗?
\documentclass{article}
\usepackage{titlesec}
\titleformat{\section}[block]
{\bfseries\filcenter}
{\textup{\thesection}}% label
{0.5em}% sep
{}% before
[\titlerule]% after
\begin{document}
\section{This is a section}
This is a sentence.
\end{document}