%%
%% This is file `ctex-report.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% ctex.dtx  (with options: `heading,report')
%% 
%%     Copyright (C) 2003--2017
%%     CTEX.ORG and any individual authors listed in the documentation.
%% ------------------------------------------------------------------------------
%% 
%%     This work may be distributed and/or modified under the
%%     conditions of the LaTeX Project Public License, either
%%     version 1.3c of this license or (at your option) any later
%%     version. This version of this license is in
%%        http://www.latex-project.org/lppl/lppl-1-3c.txt
%%     and the latest version of this license is in
%%        http://www.latex-project.org/lppl.txt
%%     and version 1.3 or later is part of all distributions of
%%     LaTeX version 2005/12/01 or later.
%% 
%%     This work has the LPPL maintenance status `maintained'.
%% 
%%     The Current Maintainers of this work are Leo Liu, Qing Lee and Liam Huang.
%% 
%% ------------------------------------------------------------------------------
%% 
\GetIdInfo$Id: ctex.dtx c498d8c 2017-04-01 21:33:50 +0800 Qing Lee <sobenlee@gmail.com> $
  {Heading modification for report (CTEX)}
\ProvidesExplFile{ctex-report.def}
  {\ExplFileDate}{2.4.9}{\ExplFileDescription}
\seq_new:N \c__ctex_section_headings_seq
\seq_gset_from_clist:Nn \c__ctex_section_headings_seq
  { section , subsection , subsubsection , paragraph , subparagraph }
\seq_new:N \c__ctex_headings_seq
\seq_gset_eq:NN \c__ctex_headings_seq \c__ctex_section_headings_seq
\seq_gput_left:Nn \c__ctex_headings_seq { chapter }
\seq_gput_left:Nn \c__ctex_headings_seq { part }
\cs_new_protected_nopar:Npn \__ctex_initial_heading:n #1
  {
    \tl_new:c { CTEX@pre#1 }
    \tl_new:c { CTEX@post#1 }
    \tl_const:cx { CTEXthe#1 }
      {
        \exp_not:c { CTEX@pre#1 }
        \exp_not:c { CTEX@the#1 }
        \exp_not:c { CTEX@post#1 }
      }
    \tl_const:cx { CTEX@#1name }
      {
        \group_begin:
          \exp_not:c { CTEX@#1@nameformat }
            {
              \exp_not:c { CTEX@pre#1 }
              \exp_not:N \tl_if_empty:NTF
              \exp_not:c { CTEX@#1@numberformat }
                { \exp_not:c { CTEX@the#1 } }
                {
                  \group_begin:
                    \exp_not:c { CTEX@#1@numberformat }
                    \exp_not:c { CTEX@the#1 }
                  \group_end:
                }
              \exp_not:c { CTEX@post#1 }
            }
        \group_end:
      }
  }
\cs_new_protected_nopar:Npn \__ctex_def_heading_keys:n #1
  {
    \tl_put_right:Nx \l__ctex_tmp_tl
      {
        #1                  .meta:nn = { ctex / #1 } { ####1 } ,
        #1 / name            .code:n =
          { \ctex_assign_heading_name:nn {#1} { ####1 } } ,
        #1 / number        .tl_set:N = \exp_not:c { CTEX@the#1 } ,
        #1 / format        .tl_set:N = \exp_not:c { CTEX@#1@format } ,
        #1 / nameformat    .tl_set:N = \exp_not:c { CTEX@#1@nameformat } ,
        #1 / numberformat  .tl_set:N = \exp_not:c { CTEX@#1@numberformat } ,
        #1 / aftername     .tl_set:N = \exp_not:c { CTEX@#1@aftername } ,
        #1 / titleformat   .tl_set:N = \exp_not:c { CTEX@#1@titleformat } ,
        #1 / aftertitle    .tl_set:N = \exp_not:c { CTEX@#1@aftertitle } ,
        #1 / beforeskip    .tl_set:N = \exp_not:c { CTEX@#1@beforeskip } ,
        #1 / afterskip     .tl_set:N = \exp_not:c { CTEX@#1@afterskip} ,
        #1 / indent        .tl_set:N = \exp_not:c { CTEX@#1@indent } ,
        #1 / numbering   .bool_set:N = \exp_not:c { CTEX@#1@numbering } ,
        #1 / afterindent .bool_set:N = \exp_not:c { CTEX@#1@afterindent } ,
        #1 / fixskip     .bool_set:N = \exp_not:c { CTEX@#1@fixskip } ,
        #1 / hang        .bool_set:N = \exp_not:c { CTEX@#1@hang } ,
        #1 / hang         .initial:n = true ,
        #1 / runin       .bool_set:N = \exp_not:c { CTEX@#1@runin } ,
        #1 / break         .tl_set:N = \exp_not:c { CTEX@#1@break } ,
        #1 / break+          .code:n =
          { \tl_put_right:Nn \exp_not:c { CTEX@#1@break } { ####1 } } ,
        #1 / tocline         .code:n =
          {
            \cs_set:Npn \exp_not:c { CTEX@#1@tocline}
                        \exp_not:n { ####1####2 } { ####1 }
          } ,
        #1 / format+         .code:n =
          { \tl_put_right:Nn \exp_not:c { CTEX@#1@format } { ####1 } } ,
        #1 / nameformat+     .code:n =
          { \tl_put_right:Nn \exp_not:c { CTEX@#1@nameformat } { ####1 } } ,
        #1 / numberformat+   .code:n =
          { \tl_put_right:Nn \exp_not:c { CTEX@#1@numberformat } { ####1 } } ,
        #1 / aftername+      .code:n =
          { \tl_put_right:Nn \exp_not:c { CTEX@#1@aftername } { ####1 } } ,
        #1 / titleformat+    .code:n =
          { \tl_put_right:Nn \exp_not:c { CTEX@#1@titleformat } { ####1 } } ,
        #1 / aftertitle+     .code:n =
          { \tl_put_right:Nn \exp_not:c { CTEX@#1@aftertitle } { ####1 } } ,
        #1 / numbering    .initial:n = true ,
        #1 / beforeskip   .initial:n = \c_zero_skip ,
        #1 / afterskip    .initial:n = \c_zero_skip ,
        #1 / indent       .initial:n = \c_zero_dim ,
        #1 / beforeskip   .value_required:n = true ,
        #1 / afterskip    .value_required:n = true ,
        #1 / indent       .value_required:n = true ,
      }
  }
\NewDocumentCommand \ctex_assign_heading_name:nn
  { m > { \SplitArgument { \c_one } { , } } +m }
  { \__ctex_assign_heading_name:nnn {#1} #2 }
\cs_new_protected:Npn \__ctex_assign_heading_name:nnn #1#2#3
  {
    \tl_set:cn { CTEX@pre#1 } {#2}
    \IfNoValueTF {#3}
      { \tl_clear:c { CTEX@post#1 } }
      { \tl_set:cn { CTEX@post#1 } {#3} }
  }
\group_begin:
\tl_set:Nn \l__ctex_tmp_tl
  {
    part    / pagestyle .tl_set:N = \CTEX@part@pagestyle ,
    chapter / pagestyle .tl_set:N = \CTEX@chapter@pagestyle ,
    chapter / lofskip   .tl_set:N = \CTEX@chapter@lofskip ,
    chapter / lotskip   .tl_set:N = \CTEX@chapter@lotskip ,
    chapter / lofskip  .initial:n = \c_zero_skip ,
    chapter / lotskip  .initial:n = \c_zero_skip ,
    chapter / lofskip  .value_required:n = true ,
    chapter / lotskip  .value_required:n = true ,
  }
\seq_map_inline:Nn \c__ctex_headings_seq
  {
    \__ctex_initial_heading:n {#1}
    \__ctex_def_heading_keys:n {#1}
  }
\use:x
  {
    \group_end:
    \keys_define:nn { ctex } { \exp_not:o { \l__ctex_tmp_tl } }
  }
\cs_new_protected_nopar:Npn \CTEX@fixtopskip
  {
    \CTEX@fixheadingskip
    \dim_compare:nNnF \tex_pagegoal:D < \c_max_dim
      { \skip_sub:Nn \l__ctex_heading_skip { \tex_topskip:D } }
  }
\cs_new_protected_nopar:Npn \CTEX@fixheadingskip
  {
    \par
    \dim_set:Nn \tex_prevdepth:D { -1000pt }
    \skip_sub:Nn \l__ctex_heading_skip { \tex_parskip:D }
  }
\skip_new:N \l__ctex_heading_skip
\cs_new_protected_nopar:Npn \CTEX@setheadingskip
  { \skip_set:Nn \l__ctex_heading_skip }
\cs_new_eq:NN \CTEX@headingskip \l__ctex_heading_skip
\ProvideDocumentCommand \partmark { m }
  { \markboth { } { } }
\cs_new_eq:NN \CTEXifname \use_ii:nn
\cs_new_protected_nopar:Npn \CTEX@ifnametrue
  { \cs_set_eq:NN \CTEXifname \use_i:nn }
\cs_new_protected_nopar:Npn \CTEX@ifnamefalse
  { \cs_set_eq:NN \CTEXifname \use_ii:nn }
\cs_new_protected_nopar:Npn \CTEX@addloflotskip #1
  {
    \skip_set:Nn \l__ctex_heading_skip { \use:c { CTEX@#1@lofskip } }
    \skip_if_eq:nnF { \l__ctex_heading_skip } { \c_zero_skip }
      {
        \addtocontents { lof }
          { \protect \addvspace { \skip_use:N \l__ctex_heading_skip } }
      }
    \skip_set:Nn \l__ctex_heading_skip { \use:c { CTEX@#1@lotskip } }
    \skip_if_eq:nnF { \l__ctex_heading_skip } { \c_zero_skip }
      {
        \addtocontents { lot }
          { \protect \addvspace { \skip_use:N \l__ctex_heading_skip } }
      }
  }
\cs_new_protected:Npn \CTEX@addtocline #1#2
  { \addcontentsline { toc } {#1} { \use:c { CTEX@#1@tocline } {#1} {#2} } }
\renewcommand\part{%
  \CTEX@part@break
  \thispagestyle{\CTEX@part@pagestyle}%
  \if@twocolumn
    \onecolumn
    \@tempswatrue
  \else
    \@tempswafalse
  \fi
  \CTEX@setheadingskip \CTEX@part@beforeskip
  \ifodd \CTEX@part@fixskip \CTEX@fixtopskip \fi
  \vspace*{\CTEX@headingskip}%
  \secdef\@part\@spart}
\def\@part[#1]#2{%
  \ifnum \c@secnumdepth >-2\relax
    \ifodd \CTEX@part@numbering
      \CTEX@ifnametrue
      \refstepcounter{part}%
    \else
      \CTEX@ifnamefalse
      \CTEX@makeanchor{part*}%
    \fi
  \else
    \CTEX@ifnamefalse
    \CTEX@makeanchor{part*}%
  \fi
  \CTEX@addtocline{part}{#1}%
   \partmark{#1}%
  {\interlinepenalty \@M
   \normalfont \CTEX@part@format
   \ifnum \c@secnumdepth >-2\relax \ifodd \CTEX@part@numbering
     \CTEX@partname \CTEX@part@aftername
   \fi \fi
   \CTEX@part@titleformat{#2}%
   \CTEX@part@aftertitle}%
  \@endpart}
\def\@spart#1{%
    \CTEX@ifnamefalse
    \CTEX@makeanchor@spart{part*}%
    {\interlinepenalty \@M
     \normalfont \CTEX@part@format
     \CTEX@part@titleformat{#1}%
     \CTEX@part@aftertitle}%
    \@endpart}
\def\@endpart{%
              \CTEX@setheadingskip \CTEX@part@afterskip
              \ifodd \CTEX@part@fixskip \CTEX@fixheadingskip \fi
              \vskip \CTEX@headingskip
              \newpage
              \if@twoside
               \if@openright
                \null
                \thispagestyle{empty}%
                \newpage
               \fi
              \fi
              \if@tempswa
                \twocolumn
              \fi}
\renewcommand\chapter{%
                    \CTEX@chapter@break
                    \thispagestyle{\CTEX@chapter@pagestyle}%
                    \global\@topnum\z@
                    \ifodd \CTEX@chapter@afterindent
                      \@afterindenttrue
                    \else
                      \@afterindentfalse
                    \fi
                    \secdef\@chapter\@schapter}
\def\@chapter[#1]#2{%
  \ifnum \c@secnumdepth >\m@ne
      \ifodd \CTEX@chapter@numbering
        \CTEX@ifnametrue
        \refstepcounter{chapter}%
        \typeout{\CTEXthechapter}%
      \else
        \CTEX@ifnamefalse
        \CTEX@makeanchor{\Hy@chapapp*}%
      \fi
  \else
    \CTEX@ifnamefalse
    \CTEX@makeanchor@chapter{\Hy@chapapp*}%
  \fi
  \CTEX@addtocline{chapter}{#1}%
  \chaptermark{#1}%
  \CTEX@addloflotskip{chapter}%
  \if@twocolumn
    \@topnewpage[\@makechapterhead{#2}]%
  \else
    \@makechapterhead{#2}%
  \@afterheading
  \fi}
\def\@schapter#1{%
  \CTEX@ifnamefalse
  \CTEX@makeanchor@schapter{\Hy@chapapp*}%
  \if@twocolumn
    \@topnewpage[\@makeschapterhead{#1}]%
  \else
    \@makeschapterhead{#1}%
    \@afterheading
  \fi}
\def\@makechapterhead#1{%
  \CTEX@setheadingskip \CTEX@chapter@beforeskip
  \ifodd \CTEX@chapter@fixskip \CTEX@fixtopskip \fi
  \vspace*{\CTEX@headingskip}%
  {\normalfont \parindent \dimexpr \CTEX@chapter@indent \relax
   \CTEX@chapter@format
   \CTEXifname{\CTEX@chaptername\CTEX@chapter@aftername}{}%
   \interlinepenalty\@M
   \CTEX@chapter@titleformat{#1}%
   \CTEX@chapter@aftertitle
   \nobreak
   \CTEX@setheadingskip \CTEX@chapter@afterskip
   \ifodd \CTEX@chapter@fixskip \CTEX@fixheadingskip \fi
   \vskip \CTEX@headingskip
  }}
\def\@makeschapterhead#1{%
  \CTEX@setheadingskip \CTEX@chapter@beforeskip
  \ifodd \CTEX@chapter@fixskip \CTEX@fixtopskip \fi
  \vspace*{\CTEX@headingskip}%
  {\normalfont \parindent \dimexpr \CTEX@chapter@indent \relax
   \CTEX@chapter@format
   \interlinepenalty\@M
   \CTEX@chapter@titleformat{#1}
   \CTEX@chapter@aftertitle
   \nobreak
   \CTEX@setheadingskip \CTEX@chapter@afterskip
   \ifodd \CTEX@chapter@fixskip \CTEX@fixheadingskip \fi
   \vskip \CTEX@headingskip
  }}
\def\@startsection#1#2#3#4#5#6{%
  \if@noskipsec \leavevmode \fi
  \par
  \CTEX@update@sectionformat@n{#1}%
  \ifodd \CTEX@afterindent
    \@afterindenttrue
  \else
    \@afterindentfalse
  \fi
  \if@nobreak
    \everypar{}%
  \else
    \csname CTEX@#1@break\endcsname
    \CTEX@setheadingskip{#4}%
    \ifodd \CTEX@fixskip \CTEX@fixheadingskip \fi
    \addvspace \CTEX@headingskip
  \fi
  \@ifstar
    {\CTEX@makeanchor@ssect{#1*}\@ssect{#3}{#4}{#5}{#6}}%
    {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
\def\@seccntformat#1{%
  \csname CTEX@#1name\endcsname
  \csname CTEX@#1@aftername\endcsname}
\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \CTEX@ifnamefalse
    \CTEX@makeanchor@sect{#1*}%
    \let\@svsec\@empty
  \else
    \ifodd \csname CTEX@#1@numbering\endcsname
      \CTEX@ifnametrue
      \refstepcounter{#1}%
      \protected@edef\@svsec{\@seccntformat{#1}\relax}%
    \else
      \CTEX@ifnamefalse
      \CTEX@makeanchor{#1*}%
      \let\@svsec\@empty
    \fi
  \fi
  \unless \ifodd \CTEX@runin
    \begingroup
      #6{%
        \CTEX@hangfrom{\hskip\glueexpr #3\relax\@svsec}%
        \interlinepenalty \@M
        \csname CTEX@#1@titleformat\endcsname{#8}%
        \csname CTEX@#1@aftertitle\endcsname}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \CTEX@addtocline{#1}{#7}%
  \else
    \def\@svsechd{%
    #6{\hskip\glueexpr #3\relax
      \@svsec
      \csname CTEX@#1@titleformat\endcsname{#8}%
      \csname CTEX@#1@aftertitle\endcsname}%
    \csname #1mark\endcsname{#7}%
    \CTEX@addtocline{#1}{#7}}%
  \fi
  \@xsect{#5}}
\def\@ssect#1#2#3#4#5{%
  \CTEX@ifnamefalse
  \unless \ifodd \CTEX@runin
    \begingroup
      #4{%
        \CTEX@hangfrom{\hskip\glueexpr #1\relax}%
          \interlinepenalty \@M
          \CTEX@titleformat@n{#5}%
          \CTEX@aftertitle}%
    \endgroup
  \else
    \def\@svsechd{#4{\hskip\glueexpr #1\relax
                     \CTEX@titleformat@n{#5}\CTEX@aftertitle}}%
  \fi
  \@xsect{#3}}
\def\@xsect#1{%
  \unless \ifodd \CTEX@runin
    \par \nobreak
    \CTEX@setheadingskip{#1}%
    \ifodd \CTEX@fixskip \CTEX@fixheadingskip \fi
    \vskip \CTEX@headingskip
    \@afterheading
  \else
    \@nobreakfalse
    \global\@noskipsectrue
    \everypar{%
      \if@noskipsec
        \global\@noskipsecfalse
       {\setbox\z@\lastbox}%
        \clubpenalty\@M
        \begingroup \@svsechd \endgroup
        \unskip
        \hskip\glueexpr #1\relax
      \else
        \clubpenalty \@clubpenalty
        \everypar{}%
      \fi}%
  \fi
  \ignorespaces}
\cs_new_protected_nopar:Npn \CTEX@hangfrom
  {
    \bool_if:NTF \CTEX@hang
      { \@hangfrom }
      { \noindent \use:n }
  }
\cs_new_protected_nopar:Npn \CTEX@update@sectionformat@n #1
  {
    \cs_set_eq:Nc \CTEX@titleformat@n { CTEX@#1@titleformat }
    \cs_set_eq:Nc \CTEX@aftertitle { CTEX@#1@aftertitle }
    \cs_set_eq:Nc \CTEX@afterindent { CTEX@#1@afterindent }
    \cs_set_eq:Nc \CTEX@fixskip { CTEX@#1@fixskip }
    \cs_set_eq:Nc \CTEX@hang { CTEX@#1@hang }
    \cs_set_eq:Nc \CTEX@runin { CTEX@#1@runin }
  }
\cs_new_eq:NN \CTEX@titleformat@n \use:n
\cs_new_eq:NN \CTEX@aftertitle \prg_do_nothing:
\cs_new_eq:NN \CTEX@afterindent \c_true_bool
\cs_new_eq:NN \CTEX@fixskip \c_false_bool
\cs_new_eq:NN \CTEX@hang \c_true_bool
\cs_new_eq:NN \CTEX@runin \c_false_bool
\cs_new:Npn \CTEX@part@tocline #1#2
  {
    \CTEXifname
      { \CTEXthepart \hspace { 1em } }
      { }
    #2
  }
\cs_new:Npn \CTEX@chapter@tocline #1#2
  {
    \CTEXifname
      { \protect \numberline { \CTEXthechapter \hspace { .3em } } }
      { }
    #2
  }
\cs_new_nopar:Npn \CTEXnumberline #1
  {
    \CTEXifname
      { \protect \numberline { \use:c { CTEXthe #1 } } }
      { }
  }
\int_zero:N \l__ctex_tmp_int
\seq_map_inline:Nn \c__ctex_section_headings_seq
  {
    \int_incr:N \l__ctex_tmp_int
    \cs_gset_protected_nopar:cpx  {#1}
      {
        \exp_not:N \@startsection {#1}
          { \int_use:N \l__ctex_tmp_int }
          { \exp_not:c { CTEX@#1@indent } }
          { \exp_not:c { CTEX@#1@beforeskip } }
          { \exp_not:c { CTEX@#1@afterskip } }
          { \exp_not:N \normalfont \exp_not:c { CTEX@#1@format } }
      }
    \cs_new:cpn { CTEX@#1@tocline } ##1##2
      { \CTEXnumberline { ##1 } ##2 }
  }
\keys_define:nn { ctex }
  {
    appendix                .meta:nn = { ctex / appendix } {#1} ,
    appendix / name          .code:n =
      { \ctex_assign_heading_name:nn { appendix } {#1} } ,
    appendix / number      .tl_set:N = \CTEX@appendix@number ,
    appendix / numbering .bool_set:N = \CTEX@appendix@numbering ,
    appendix / numbering  .initial:n = true
  }
\tl_new:N \CTEX@preappendix
\tl_new:N \CTEX@postappendix
\cs_new_eq:NN \CTEX@save@appendix \appendix
\cs_gset_protected_nopar:Npn \appendix
  {
    \CTEX@save@appendix
    \gdef \CTEX@prechapter { \CTEX@preappendix }
    \gdef \CTEX@thechapter { \CTEX@appendix@number }
    \gdef \CTEX@postchapter { \CTEX@postappendix }
    \gdef \CTEX@chapter@numbering { \CTEX@appendix@numbering }
  }
\cs_new_protected_nopar:Npn \CTEX@makeanchor #1
  { }
\seq_new:N \c__ctex_headings_cs_seq
\seq_gset_from_clist:Nn \c__ctex_headings_cs_seq
  { part , spart , chapter , schapter , sect , ssect }
\seq_map_inline:Nn \c__ctex_headings_cs_seq
  {
    \cs_new_eq:cc { CTEX@ #1 } { @ #1 }
    \cs_new_eq:cN { CTEX@makeanchor@ #1 } \CTEX@makeanchor
  }
\cs_new_protected_nopar:Npn \CTEX@hyperheadinghook
  {
    \group_begin:
      \ifHy@implicit
        \cs_set_eq:NN \H@old@chapter \Hy@org@chapter
        \seq_map_inline:Nn \c__ctex_headings_cs_seq
          {
            \cs_if_eq:ccT { H@old@ ##1 } { CTEX@ ##1 }
              {
                \cs_gset_eq:cc { @ ##1 } { CTEX@ ##1 }
                \cs_gset_eq:cN { CTEX@makeanchor@ ##1 } \CTEX@makeanchor
              }
          }
      \else:
        \seq_map_inline:Nn \c__ctex_headings_cs_seq
          { \cs_gset_eq:cN { CTEX@makeanchor@ ##1 } \CTEX@makeanchor }
      \fi:
    \group_end:
  }
\ctex_at_end_package:nn { hyperref }
  {
    \cs_gset_protected_nopar:Npn \CTEX@makeanchor #1
      {
        \Hy@MakeCurrentHrefAuto {#1}
        \Hy@raisedlink
          {
            \hyper@anchorstart { \@currentHref }
            \hyper@anchorend
          }
      }
    \CTEX@hyperheadinghook
  }
\cs_new_protected_nopar:Npn \ctex_titlesec_hook:
  {
    \@ifpackagewith { titlesec } { explicit }
      {
        \cs_set_eq:NN \__ctex_titlesec_format:Nn
                      \__ctex_titlesec_format_explicit:Nn
      }
      { }
    \clist_map_inline:nn
      { indentafter , noindentafter , indentfirst , nonindentfirst }
      {
        \@ifpackagewith { titlesec } { ##1 }
          {
            \clist_map_break:n
              { \cs_set_eq:NN \__ctex_titlesec_hook:n \__ctex_titlesec_format:n }
          }
          { }
      }
    \seq_map_function:NN \c__ctex_section_headings_seq \__ctex_titlesec_hook:n
  }
\cs_new_protected_nopar:Npn \__ctex_titlesec_hook:n #1
  {
    \__ctex_titlesec_format:n {#1}
    \exp_args:Nc \__ctex_titlesec_spacing:Nn { ttls@#1 } {#1}
  }
\cs_new_protected_nopar:Npn \__ctex_titlesec_format:n #1
  {
    \cs_if_free:cF { ttlf@#1 }
      { \exp_args:Nc \__ctex_titlesec_format:Nn { ttlf@#1 } {#1} }
  }
\cs_new_protected_nopar:Npn \__ctex_titlesec_format:Nn #1#2
  {
    \tl_set:Nx #1
      {
        \bool_if:cTF { CTEX@#2@runin }
          { \exp_not:N \ttlh@runin }
          { \exp_not:N \ttlh@hang }
        \tl_tail:N #1
      }
  }
\cs_new_protected_nopar:Npn \__ctex_titlesec_format_explicit:Nn #1#2
  {
    \cs_set_nopar:Npx #1 ##1
      {
        \bool_if:cTF { CTEX@#2@runin }
          { \exp_not:N \ttlh@runin }
          { \exp_not:N \ttlh@hang }
        \exp_args:No \tl_tail:n { #1 { } }
      }
  }
\cs_new_protected_nopar:Npn \__ctex_titlesec_spacing:Nn #1#2
  { \tl_set:Nx #1 { \exp_after:wN \__ctex_titlesec_spacing:nnnnnn #1 {#2} } }
\cs_new:Npn \__ctex_titlesec_spacing:nnnnnn #1#2#3#4#5#6
  {
    \exp_not:n { {#1} {#2} {#3} {#4} }
    { \bool_if:cTF { CTEX@#6@afterindent } { \@ne } { \z@ } }
  }
\@ifpackageloaded { titlesec }
  { }
  {
    \ctex_at_end_package:nn { titlesec }
      {
        \@ifpackagewith { titlesec } { loadonly }
          { }
          { \ctex_titlesec_hook: }
      }
  }
\ctex_at_end_package:nn { titlesec }
  {
    \tl_set:Nn \ttl@chapterout { \typeout { \CTEXthechapter } }
    \cs_if_free:NF \ttl@tocpart
      {
        \cs_set_protected_nopar:Npn \ttl@tocpart
          { \tl_set:Nn \ttl@a { \CTEXthepart \hspace { 1em } } }
      }
    \seq_map_inline:Nn \c__ctex_headings_seq
      {
        \cs_if_exist:cF { ttl@toc #1 }
          {
            \cs_new_protected_nopar:cpx { ttl@toc #1 }
              {
                \tl_set:Nn \exp_not:N \ttl@a
                  {
                    \exp_not:N \protect
                    \exp_not:N \numberline { \exp_not:c { CTEXthe #1 } }
                  }
              }
          }
      }
  }
\group_begin:
\char_set_catcode_other:N \#
\cs_new_protected_nopar:Npn \ctex_titleps_hook:
  {
    \ctex_patch_cmd:Nnn \ttl@settopmark
      { \protect \@namedef { the#1 } { \@nameuse { the#1 } } }
      {
        \protect \@namedef { the#1 } { \@nameuse { the#1 } }
        \CTEX@titlepslabel@set {#1}
      }
    \ctex_patch_cmd:Nnn \ttl@setsubmark
      { \protect \@namedef { the#1 } { } }
      {
        \protect \@namedef { the#1 } { }
        \CTEX@titlepslabel@clear {#1}
      }
    \ctex_patch_cmd:Nnn \ttl@setsubmark
      { \protect \@namedef { the#2 } { \@nameuse { the#2 } } }
      {
        \protect \@namedef { the#2 } { \@nameuse { the#2 } }
        \CTEX@titlepslabel@set {#2}
      }
  }
\group_end:
\cs_new_nopar:Npn \CTEX@titlepslabel@set #1
  {
    \cs_if_free:cF { CTEXthe#1 }
      { \protect \@namedef { CTEXthe#1 } { \@nameuse { CTEXthe#1 } } }
  }
\cs_new_nopar:Npn \CTEX@titlepslabel@clear #1
  {
    \cs_if_free:cF { CTEXthe#1 }
      { \protect \@namedef { CTEXthe#1 } { } }
  }
\ctex_at_end_package:nn { titlesec }
  { \cs_if_free:NF \ttl@settopmark { \ctex_titleps_hook: } }
\ctex_at_end_package:nn { titleps } { \ctex_titleps_hook: }
\ctex_at_end_package:nn { titleps }
  {
    \cs_set_protected_nopar:Npn \ttl@setifthe #1
      {
        \exp_args:Nco \cs_set_nopar:Npn { ifthe #1 }
          {
            \CTEXifname
              { \protect \@firstoftwo }
              { \protect \@secondoftwo }
          }
      }
    \seq_map_function:NN \c__ctex_headings_seq \ttl@setifthe
  }
\cs_new_protected:Npn \CTEX@toc@width@n #1
  {
    \hbox_set:Nn \l__ctex_tmp_box {#1}
    \dim_set:Nn \@tempdima
      {
        \dim_max:nn { \@tempdima }
          { \box_wd:N \l__ctex_tmp_box + \f@size \p@ / \c_two }
      }
  }
\group_begin:
\char_set_catcode_other:N \#
\use:n
  {
    \group_end:
    \ctex_preto_cmd:NnnTF \numberline { \ExplSyntaxOff }
      { \CTEX@toc@width@n {#1} }
      { }
      { \ctex_patch_failure:N \numberline }
    \@ifpackageloaded { tocloft }
      { }
      {
        \ctex_at_end_package:nn { tocloft }
          {
            \ctex_preto_cmd:NnnTF \numberline
              { \char_set_catcode_letter:n { 64 } }
              { \CTEX@toc@width@n {#1} }
              { }
              { \ctex_patch_failure:N \numberline }
          }
      }
  }
\ctex_patch_cmd:Nnn \ps@headings
  {
    \ifnum \c@secnumdepth > \m@ne
      \@chapapp \ \thechapter . ~ \ %
    \fi
  }
  { \CTEXifname { \CTEXthechapter \quad } { } }
\if@twoside
  \ctex_patch_cmd:Nnn \ps@headings
    { \ifnum \c@secnumdepth > \z@ \thesection . ~ \ \fi }
    { \CTEXifname { \CTEXthesection } { } }
\fi:
\ctex_at_end_package:nn { fancyhdr }
  {
    \ctex_patch_cmd:Nnn \ps@fancy
      { \ifnum \c@secnumdepth > \m@ne \@chapapp \ \thechapter . ~ \ \fi }
      { \CTEXifname { \CTEXthechapter \quad } { } }
    \ctex_patch_cmd:Nnn \ps@fancy
      { \ifnum \c@secnumdepth > \z@ \thesection . ~ \ \fi }
      { \CTEXifname { \CTEXthesection } { } }
  }
\cs_new_protected_nopar:Npn \CTEX@setcurrentlabel@n #1
  {
    \protected@edef \@currentlabel
      {
        \cs_if_exist:cTF { CTEX@the#1 }
          { \exp_args:cc { p@#1 } { CTEX@the#1 } }
          { \exp_not:o { \@currentlabel } }
      }
  }
\cs_new_protected_nopar:Npn \ctex_varioref_hook:
  {
    \seq_map_inline:Nn \c__ctex_headings_seq
      { \ctex_fix_varioref_label:n { ##1 } }
  }
\cs_new_protected_nopar:Npn \ctex_fix_varioref_label:n #1
  {
    \tl_if_empty:cT { p@#1 }
      { \exp_args:Nno \labelformat {#1} { \cs:w CTEX@the#1 \cs_end: } }
  }
\@ifpackageloaded { varioref }
  { \ctex_varioref_hook: }
  {
    \cs_new_eq:NN \CTEX@save@refstepcounter \refstepcounter
    \RenewDocumentCommand \refstepcounter { m }
      {
        \CTEX@save@refstepcounter {#1}
        \CTEX@setcurrentlabel@n {#1}
      }
    \ctex_at_end_package:nn { varioref } { \ctex_varioref_hook: }
  }
\ctex_scheme_input:o { \l__ctex_scheme_tl }
%% 
%%
%% End of file `ctex-report.def'.
