如果 \section 是更新的,如何在 \section 之后设置 \rule?

如果 \section 是更新的,如何在 \section 之后设置 \rule?

续订\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}标识符请求一个(可选)star、一个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}

相关内容