格式化标题页时出现的问题

格式化标题页时出现的问题

我正在开发一个新的文档类供个人使用。所以我正在编写一个命令来生成标题页。我遇到了几个问题(此代码不会产生任何错误):

  • 首要问题 :我想删除标题Contents但不能使用:
\makeatletter
\@starttoc{toc}
\makeatother

由于命令嵌入在\newcommand语句中。如果我尝试使用它,它会引发错误。我尝试了在这里找到的不同解决方案:如何隐藏目录的标题?https://latex.org/forum/viewtopic.php?t=8151. 它们都不起作用。 编辑:此问题已解决。我需要\contentsname在之后重新定义\begin{document}

  • 第二期:如果我在调用函数时设置了页面颜色,则不会考虑该设置并且页面保持白色。

以下是 MWE 的完整代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lipsum}
% Packages used in this command :
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usepackage[object=vectorian]{pgfornament}
\usepackage{xcolor}
\usepackage{pagecolor}
\usepackage[paperheight=21cm,paperwidth=14.85cm,textheight=16cm,textwidth=13.85cm,inner=0.5cm,outer=0.5cm,top=2cm,twoside,showframe,verbose]{geometry}

\newcommand{\myTitlepage}[4]{
    \pagenumbering{gobble} % No page number on this titlepage
    \thispagestyle{empty}
    \newpagecolor{#4} % Changing page color
    \newgeometry{paperheight=21cm,paperwidth=14.85cm,top=2cm,left=1cm,right=1cm,bottom=0.5cm}
    \begin{titlepage}
        \begin{center}
            \large #3 -- \today\\[2cm]
            % Title
            {\begin{minipage}\linewidth
            \centering
            \vskip10pt
            \resizebox{\textwidth}{!}{#1}\\[1cm]
            \pgfornament[width=0.5\textwidth]{68}
            \vskip6pt
            \end{minipage}}
            \vskip10pt
            \large #2\\
            \vspace{1cm}
            \begin{tcolorbox}[
                breakable,enhanced,title={Table des matières},
                colframe=black,colback=white,colbacktitle=white,
                fonttitle=\bfseries,coltitle=black,attach boxed title to top center=
                {yshift=-0.25mm-\tcboxedtitleheight/2,yshifttext=2mm-\tcboxedtitleheight/2},
                boxed title style={boxrule=0.5mm,
                frame code={ \path[tcb fill frame] ([xshift=-4mm]frame.west)
                -- (frame.north west) -- (frame.north east) -- ([xshift=4mm]frame.east)
                -- (frame.south east) -- (frame.south west) -- cycle; },
                interior code={ \path[tcb fill interior] ([xshift=-2mm]interior.west)
                -- (interior.north west) -- (interior.north east)
                -- ([xshift=2mm]interior.east) -- (interior.south east) -- (interior.south west)
                -- cycle;} }]
                % TOC display
                \tableofcontents
            \end{tcolorbox}
            \vfill
        \end{center}
        \restorepagecolor
    \end{titlepage}
}
\begin{document}
\myTitlepage{A Title}{An Author (me)}{Header}{yellow!25!white}
\section{A section}
\lipsum[1]
\end{document}

请问我该如何解决这两个问题?

答案1

只需移动\restorepagecolor之后\end{titlepage}(在页面发出后恢复颜色,而不是之前!)。

无需更改\contentsname,使用\@starttoc代替\makeatletter\makeatother围绕 的整个定义\myTitlepage。TeX 中的类别代码取决于输入首次被标记的时间(因此在定义期间),稍后更改它们不会影响已标记事物的定义。

\restoregeometry此外,您的代码在标题页后缺少。在里面\newgeometry您不能使用paperheightpaperwidth。使用\pagenumbering{gobble}不是必需的,只需使用\thispagestyle{empty}就足够了,这样就不会显示页码,但(至少使用article)这是不必要的,因为titlepage环境已经为您完成了这一点。此外,在另一个环境中,我会使用\centering而不是center(这里不是问题,但center如果嵌套在“错误”的环境中,例如浮动,通常会增加不必要的垂直空间)。

用来\resizebox排版你的标题是一个坏主意(如果你的标题太长会发生什么?),相反,我会测量你的标题的大小\Huge,如果它对于单行来说太大,我就不会缩放,否则我们仍然可以使用,\resizebox如果你愿意的话。

另外,我将您的“多个”更改\vskip\vspace,并引入了几个\par“s”而不是或其他形式的换行符,删除了标题中\\不必要的嵌套,并将其用于目录。minipage\contentsname

除了这些更改之外,我还重新缩进您的代码并改变了您使用key=value接口的方式(只是为了符合我的喜好,但在我看来,这使得代码更易于阅读和维护)。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lipsum}
% Packages used in this command :
\usepackage[most]{tcolorbox}
\usepackage[object=vectorian]{pgfornament}
\usepackage{xcolor}
\usepackage{pagecolor}
\usepackage
  [
     paperheight=21cm
    ,paperwidth=14.85cm
    ,textheight=16cm
    ,textwidth=13.85cm
    ,inner=0.5cm
    ,outer=0.5cm
    ,top=2cm
    ,twoside
    ,showframe
    ,verbose
  ]
  {geometry}

\makeatletter
\newcommand{\myTitlepage}[4]
  {%
    \newpagecolor{#4}% Changing page color
    \newgeometry{top=2cm,left=1cm,right=1cm,bottom=0.5cm}%
    \begin{titlepage}%
      \centering
      \large
      #3 -- \today\par
      % Title
      \vspace{2cm}%
      \begingroup
        \Huge
        \sbox0{#1}%
        \ifdim\wd0>\linewidth
          \unhbox0
        \else
          \resizebox{\linewidth}{!}{\usebox0}%
        \fi
        \par
      \endgroup
      \vspace{1cm}%
      \pgfornament[width=0.5\textwidth]{68}\par
      \vspace{16pt}%
      #2\par
      \vspace{1cm}%
      \begin{tcolorbox}
        [
           breakable
          ,enhanced
          ,title=\contentsname
          ,colframe=black
          ,colback=white
          ,colbacktitle=white
          ,fonttitle=\bfseries
          ,coltitle=black
          ,attach boxed title to top center=
            {%
               yshift=-0.25mm-\tcboxedtitleheight/2
              ,yshifttext=2mm-\tcboxedtitleheight/2
            }
          ,boxed title style=
            {%
               boxrule=0.5mm
              ,frame code=
                {%
                  \path[tcb fill frame] ([xshift=-4mm]frame.west)
                  -- (frame.north west) -- (frame.north east)
                  -- ([xshift=4mm]frame.east) -- (frame.south east)
                  -- (frame.south west) -- cycle;%
                }
              ,interior code=
                {%
                  \path[tcb fill interior] ([xshift=-2mm]interior.west)
                  -- (interior.north west) -- (interior.north east)
                  -- ([xshift=2mm]interior.east) -- (interior.south east)
                  -- (interior.south west) -- cycle;%
                }%
            }%
        ]%
        % TOC display
        \@starttoc{toc}%
      \end{tcolorbox}%
      \vfill
    \end{titlepage}%
    \restorepagecolor
    \restoregeometry
  }
\makeatother

\usepackage{duckuments}% <- just for dummy contents

\begin{document}
\myTitlepage{A really long Title that is too long to fit in a single line so
creates issues}{An Author (me)}{Header}{yellow!25!white}

% dummy contents
\duckument
\duckument
\end{document}

在此处输入图片描述

相关内容