我正在开发一个新的文档类供个人使用。所以我正在编写一个命令来生成标题页。我遇到了几个问题(此代码不会产生任何错误):
- 首要问题 :我想删除标题
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
您不能使用paperheight
和paperwidth
。使用\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}