如何在 tcolorbox 中计算当前学年?

如何在 tcolorbox 中计算当前学年?

我创建了一个个人包,其中包含摘要框的定义。

此框有一个可选参数,即当前学年(在下面的屏幕截图中以黄色突出显示)

学校年鉴

套房

我希望能够自动计算当前学年。

  • 因此,对于之间的编译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环境中的空参数,请使用\ifblanketoolbox宏)或切换到\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}

相关内容