我创建了一个个人包,其中包含摘要框的定义。
此框有一个可选参数,即当前学年(在下面的屏幕截图中以黄色突出显示)。
我希望能够自动计算当前学年。
- 因此,对于之间的编译2018 年 9 月 1 日和2019 年 8 月 31 日
2018/2019
,默认显示学年。 - 否则,如果将此选项设置为
2017
,它将像今天一样显示2017/2018
。
如何实现这一点?
当前代码是@jbfu 的回应:
\documentclass{article}
\usepackage{lipsum}
\usepackage{xfrac}
\usepackage[most]{tcolorbox}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% boite resumé
\def\couleurresume{red}%
% style du titre « résumé du cours »
\tcbset{titreresume/.style={
boxed title style={
colframe=\couleurresume!50,%
colback=\couleurresume!10,%
coltext=blue,%
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}
}
% style des soustitres des résumés
\tcbset{soustitre/.style={
subtitle style={%
colback=\couleurresume!7,%
colframe=\couleurresume!50,%
boxsep=1mm,
fontupper={\sffamily\bfseries\large\selectfont\color{\couleurresume!63!black}}}}
}
% style du titre-boxed des encadrés
\tcbset{titrecadre/.style={%
minipage boxed title*=-.5\linewidth,
boxed title style={
boxrule=.8pt,boxsep=0pt,toptitle=0pt,
colframe=\couleurresume!55,colback=white},
halign title=left}
}
% boite créant la boite résumé
\newtcolorbox[auto counter]{resume}[2][]{%
minipage boxed title*=-106mm,
attach boxed title to top center={yshift=-3mm,xshift=-\linewidth/5},
enhanced,
nobeforeafter,
lower separated=false,
before upper={
\textcolor{\couleurresume!63!black}{\sfrac{#1}{\the\numexpr#1+1} \hfill{#2}\hfill\thetcbcounter/\ref{nombre-de-resume}}},
colframe=\couleurresume!50,%
colback=white,%
coltitle=\couleurresume!63!black,%
leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,
titreresume,soustitre,title={\normalsize Résumé}
}
\usepackage{atveryend}
\makeatletter
\AfterLastShipout{%
\immediate\write\@auxout
{\string\newlabel{nombre-de-resume}{{\thetcb@cnt@resume}{}}}%
}
\makeatother
\begin{document}
\begin{resume}[2018]{chapitre 1}
\tcbsubtitle{Définition}
\lipsum[1]
\end{resume}
\newpage
\begin{resume}[2018]{chapitre 1}
\tcbsubtitle{Propriétés}
\lipsum[2]
\end{resume}
%\show\tcbcounter
\end{document}
答案1
请注意,有一个后续问题这里...
\NewDocumentCommand
这是一种使用和检查\year
计数器寄存器的方法\month
。
显然,法国的一个学年就是整整一年(这与德国不同,德国的学年通常于 8 月/9 月开始,6 月/7 月结束 - 这里不计算暑假)
\currentschoolyear
有一个可选参数,使用\IfValueTF
-- 进行测试,如果没有参数,月份是否小于,9
如果是这种情况,则是从一月到八月的时间,所以它是该时期的当前学年,如果月份为 9 或更大,则值前进到下一年,即 2019/09/21 将给出2019/2020
,而 2019/05/21 将返回 2018/2019。
\NewDocumentCommand{\currentschoolyear}{+o}{%
\IfValueTF{#1}{%
\sfrac{#1}{\the\numexpr#1+1}%
}{%
\ifnum\month<9%
\sfrac{\the\numexpr\year-1}{\the\year}%
\else
\sfrac{\the\year}{\the\numexpr\year+1}%
\fi
}%
}
为了测试tcolorbox
环境中的空参数,请使用\ifblank
(etoolbox
宏)或切换到\NewTColorBox
允许检查xparse
类似参数说明符的更复杂的宏。
\ifblank
我在环境定义中提供了两种方法oldresume
,以及IfValueTF=
- 方法resume
。
\month=9
可用于明确设置月份(如果需要),例如用于测试等,\year=2019
如果需要,同样适用于等。
\documentclass{article}
\usepackage{lipsum}
\usepackage{xfrac}
\usepackage[most]{tcolorbox}
\NewDocumentCommand{\currentschoolyear}{+o}{%
\IfValueTF{#1}{%
\sfrac{#1}{\the\numexpr#1+1}
}{%
\ifnum\month<9%
\sfrac{\the\numexpr\year-1}{\the\year}%
\else
\sfrac{\the\year}{\the\numexpr\year+1}%
\fi
}%
}
%\month=7
%\day=31
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% boite resumé
\def\couleurresume{red}%
% style du titre « résumé du cours »
\tcbset{titreresume/.style={
boxed title style={
colframe=\couleurresume!50,%
colback=\couleurresume!10,%
coltext=blue,%
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}
}
% style des soustitres des résumés
\tcbset{soustitre/.style={
subtitle style={%
colback=\couleurresume!7,%
colframe=\couleurresume!50,%
boxsep=1mm,
fontupper={\sffamily\bfseries\large\selectfont\color{\couleurresume!63!black}}}}
}
% style du titre-boxed des encadrés
\tcbset{titrecadre/.style={%
minipage boxed title*=-.5\linewidth,
boxed title style={
boxrule=.8pt,boxsep=0pt,toptitle=0pt,
colframe=\couleurresume!55,colback=white},
halign title=left}
}
% boite créant la boite résumé
\newtcolorbox[auto counter]{oldresume}[2][]{%
minipage boxed title*=-106mm,
attach boxed title to top center={yshift=-3mm,xshift=-\linewidth/5},
enhanced,
nobeforeafter,
lower separated=false,
before upper={
\textcolor{\couleurresume!63!black}{\ifblank{#1}{\currentschoolyear}{\currentschoolyear[#1]} \hfill{#2}\hfill\thetcbcounter/\ref{nombre-de-resume}}},
% \textcolor{\couleurresume!63!black}{\sfrac{#1}{\the\numexpr#1+1} \hfill{#2}\hfill\thetcbcounter/\ref{nombre-de-resume}}},
colframe=\couleurresume!50,%
colback=white,%
coltitle=\couleurresume!63!black,%
leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,
titreresume,soustitre,title={\normalsize Résumé}
}
\NewTColorBox[auto counter]{resume}{+o+m}{%
minipage boxed title*=-106mm,
attach boxed title to top center={yshift=-3mm,xshift=-\linewidth/5},
enhanced,
nobeforeafter,
lower separated=false,
IfValueTF={#1}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear[#1] \hfill{#2}\hfill\thetcbcounter/\ref{nombre-de-resume}}},
}{%
before upper={\textcolor{\couleurresume!63!black}{\currentschoolyear \hfill{#2}\hfill\thetcbcounter/\ref{nombre-de-resume}}},
},
colframe=\couleurresume!50,%
colback=white,%
coltitle=\couleurresume!63!black,%
leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,
titreresume,soustitre,title={\normalsize Résumé}
}
\usepackage{atveryend}
\makeatletter
\AfterLastShipout{%
\immediate\write\@auxout
{\string\newlabel{nombre-de-resume}{{\thetcb@cnt@resume}{}}}%
}
\makeatother
\begin{document}
\begin{resume}[2017]{chapitre 1}
\tcbsubtitle{Définition}
\lipsum[1]
\end{resume}
\newpage
\begin{resume}{chapitre 1}
\tcbsubtitle{Propriétés}
\lipsum[2]
\end{resume}
%\show\tcbcounter
\end{document}