Definir colores de portada según el mes actual

Definir colores de portada según el mes actual

Estoy escribiendo una documentación de guía de estilo y quiero que el documento sea visualmente atractivo y se actualizó usando el color de la portada.

La idea principal es actualizar automáticamente el color de la portada según el mes en que se compiló el documento.

Los colores de la portada se definen como coverBackgroundy coverFont.

\documentclass[12pt,a4paper]{book}
\usepackage[margin=2cm]{geometry}
\usepackage{xcolor}
\definecolor{grayOne}{rgb}{0.95, 0.95, 0.96}

\definecolor{coverBackground}{rgb}{0.952, 0.929, 0.858}
\definecolor{coverFont}{rgb}{0.223, 0.239, 0.313}

\usepackage[backgroundcolor=grayOne,linecolor=white]{mdframed}

\begin{document}

    \begin{titlepage}
        \begin{mdframed}[backgroundcolor=coverBackground]
            \centering
            \vspace*{.25\textheight}
            \textcolor{coverFont}{\Huge Page title}\\
            \vspace{10pt}\par
            \textcolor{coverFont}{\today}\\
            \vspace*{.25\textheight}
        \end{mdframed}
    \end{titlepage}

\end{document}

También tengo un archivo de utilidad donde he definido un gran conjunto de colores, sería genial usarlos.

    %--------------------------------------------
    %   Open Color Palette
    %   https://yeun.github.io/open-color/
    %--------------------------------------------
    % GRAY
    \definecolor{grayZero}{rgb}{0.97, 0.98, 0.98}
    \definecolor{grayOne}{rgb}{0.95, 0.95, 0.96}
    \definecolor{grayTwo}{rgb}{0.91, 0.93, 0.94}
    \definecolor{grayThree}{rgb}{0.87, 0.89, 0.9}
    \definecolor{grayFour}{rgb}{0.81, 0.83, 0.85}
    \definecolor{grayFive}{rgb}{0.68, 0.71, 0.74}
    \definecolor{graySix}{rgb}{0.53, 0.56, 0.59}
    \definecolor{graySeven}{rgb}{0.29, 0.31, 0.34}
    \definecolor{grayEight}{rgb}{0.2, 0.23, 0.25}
    \definecolor{grayNine}{rgb}{0.13, 0.15, 0.16}

    % RED
    \definecolor{redZero}{rgb}{1.0, 0.96, 0.96}
    \definecolor{redOne}{rgb}{1.0, 0.89, 0.89}
    \definecolor{redTwo}{rgb}{1.0, 0.79, 0.79}
    \definecolor{redThree}{rgb}{1.0, 0.66, 0.66}
    \definecolor{redFour}{rgb}{1.0, 0.53, 0.53}
    \definecolor{redFive}{rgb}{1.0, 0.42, 0.42}
    \definecolor{redSix}{rgb}{0.98, 0.32, 0.32}
    \definecolor{redSeven}{rgb}{0.94, 0.24, 0.24}
    \definecolor{redEight}{rgb}{0.88, 0.19, 0.19}
    \definecolor{redNine}{rgb}{0.79, 0.16, 0.16}

    % PINK
    \definecolor{pinkZero}{rgb}{1.0, 0.94, 0.96}
    \definecolor{pinkOne}{rgb}{1.0, 0.87, 0.92}
    \definecolor{pinkTwo}{rgb}{0.99, 0.76, 0.84}
    \definecolor{pinkThree}{rgb}{0.98, 0.64, 0.76}
    \definecolor{pinkFour}{rgb}{0.97, 0.51, 0.67}
    \definecolor{pinkFive}{rgb}{0.94, 0.4, 0.58}
    \definecolor{pinkSix}{rgb}{0.9, 0.29, 0.5}
    \definecolor{pinkSeven}{rgb}{0.84, 0.2, 0.42}
    \definecolor{pinkEight}{rgb}{0.76, 0.15, 0.36}
    \definecolor{pinkNine}{rgb}{0.65, 0.12, 0.3}

    % GRAPE
    \definecolor{grapeZero}{rgb}{0.97, 0.94, 0.99}
    \definecolor{grapeOne}{rgb}{0.95, 0.85, 0.98}
    \definecolor{grapeTwo}{rgb}{0.93, 0.75, 0.98}
    \definecolor{grapeThree}{rgb}{0.9, 0.6, 0.97}
    \definecolor{grapeFour}{rgb}{0.85, 0.47, 0.95}
    \definecolor{grapeFive}{rgb}{0.8, 0.36, 0.91}
    \definecolor{grapeSix}{rgb}{0.75, 0.29, 0.86}
    \definecolor{grapeSeven}{rgb}{0.68, 0.24, 0.79}
    \definecolor{grapeEight}{rgb}{0.61, 0.21, 0.71}
    \definecolor{grapeNine}{rgb}{0.53, 0.18, 0.61}

    % VIOLET
    \definecolor{violetZero}{rgb}{0.95, 0.94, 1.0}
    \definecolor{violetOne}{rgb}{0.9, 0.86, 1.0}
    \definecolor{violetTwo}{rgb}{0.82, 0.75, 1.0}
    \definecolor{violetThree}{rgb}{0.69, 0.59, 0.99}
    \definecolor{violetFour}{rgb}{0.59, 0.46, 0.98}
    \definecolor{violetFive}{rgb}{0.52, 0.37, 0.97}
    \definecolor{violetSix}{rgb}{0.47, 0.31, 0.95}
    \definecolor{violetSeven}{rgb}{0.44, 0.28, 0.91}
    \definecolor{violetEight}{rgb}{0.4, 0.25, 0.85}
    \definecolor{violetNine}{rgb}{0.37, 0.24, 0.77}

    % INDIGO
    \definecolor{indigoZero}{rgb}{0.93, 0.95, 1.0}
    \definecolor{indigoOne}{rgb}{0.86, 0.89, 1.0}
    \definecolor{indigoTwo}{rgb}{0.73, 0.78, 1.0}
    \definecolor{indigoThree}{rgb}{0.57, 0.65, 1.0}
    \definecolor{indigoFour}{rgb}{0.45, 0.56, 0.99}
    \definecolor{indigoFive}{rgb}{0.36, 0.49, 0.98}
    \definecolor{indigoSix}{rgb}{0.3, 0.43, 0.96}
    \definecolor{indigoSeven}{rgb}{0.26, 0.39, 0.92}
    \definecolor{indigoEight}{rgb}{0.23, 0.36, 0.86}
    \definecolor{indigoNine}{rgb}{0.21, 0.31, 0.78}

    % CYAN
    \definecolor{cyanZero}{rgb}{0.89, 0.98, 0.99}
    \definecolor{cyanOne}{rgb}{0.77, 0.96, 0.98}
    \definecolor{cyanTwo}{rgb}{0.6, 0.91, 0.95}
    \definecolor{cyanThree}{rgb}{0.4, 0.85, 0.91}
    \definecolor{cyanFour}{rgb}{0.23, 0.79, 0.86}
    \definecolor{cyanFive}{rgb}{0.13, 0.72, 0.81}
    \definecolor{cyanSix}{rgb}{0.08, 0.67, 0.75}
    \definecolor{cyanSeven}{rgb}{0.06, 0.6, 0.68}
    \definecolor{cyanEight}{rgb}{0.05, 0.52, 0.6}
    \definecolor{cyanNine}{rgb}{0.04, 0.45, 0.52}

    % BLUE
    \definecolor{blueZero}{rgb}{0.91, 0.96, 1.0}
    \definecolor{blueOne}{rgb}{0.82, 0.92, 1.0}
    \definecolor{blueTwo}{rgb}{0.65, 0.85, 1.0}
    \definecolor{blueThree}{rgb}{0.45, 0.75, 0.99}
    \definecolor{blueFour}{rgb}{0.3, 0.67, 0.97}
    \definecolor{blueFive}{rgb}{0.2, 0.6, 0.94}
    \definecolor{blueSix}{rgb}{0.13, 0.55, 0.9}
    \definecolor{blueSeven}{rgb}{0.11, 0.49, 0.84}
    \definecolor{blueEight}{rgb}{0.1, 0.44, 0.76}
    \definecolor{blueNine}{rgb}{0.09, 0.39, 0.67}

    % TEAL
    \definecolor{tealZero}{rgb}{0.9, 0.99, 0.96}
    \definecolor{tealOne}{rgb}{0.76, 0.98, 0.91}
    \definecolor{tealTwo}{rgb}{0.59, 0.95, 0.84}
    \definecolor{tealThree}{rgb}{0.39, 0.9, 0.75}
    \definecolor{tealFour}{rgb}{0.22, 0.85, 0.66}
    \definecolor{tealFive}{rgb}{0.13, 0.79, 0.59}
    \definecolor{tealSix}{rgb}{0.07, 0.72, 0.53}
    \definecolor{tealSeven}{rgb}{0.05, 0.65, 0.47}
    \definecolor{tealEight}{rgb}{0.04, 0.57, 0.41}
    \definecolor{tealNine}{rgb}{0.03, 0.5, 0.36}

    % GREEN
    \definecolor{greenZero}{rgb}{0.92, 0.98, 0.93}
    \definecolor{greenOne}{rgb}{0.83, 0.98, 0.85}
    \definecolor{greenTwo}{rgb}{0.7, 0.95, 0.73}
    \definecolor{greenThree}{rgb}{0.55, 0.91, 0.6}
    \definecolor{greenFour}{rgb}{0.41, 0.86, 0.49}
    \definecolor{greenFive}{rgb}{0.32, 0.81, 0.4}
    \definecolor{greenSix}{rgb}{0.25, 0.75, 0.34}
    \definecolor{greenSeven}{rgb}{0.22, 0.7, 0.3}
    \definecolor{greenEight}{rgb}{0.18, 0.62, 0.27}
    \definecolor{greenNine}{rgb}{0.17, 0.54, 0.24}

    % LIME
    \definecolor{limeZero}{rgb}{0.96, 0.99, 0.89}
    \definecolor{limeOne}{rgb}{0.91, 0.98, 0.78}
    \definecolor{limeTwo}{rgb}{0.85, 0.96, 0.64}
    \definecolor{limeThree}{rgb}{0.75, 0.92, 0.46}
    \definecolor{limeFour}{rgb}{0.66, 0.89, 0.29}
    \definecolor{limeFive}{rgb}{0.58, 0.85, 0.18}
    \definecolor{limeSix}{rgb}{0.51, 0.79, 0.12}
    \definecolor{limeSeven}{rgb}{0.45, 0.72, 0.09}
    \definecolor{limeEight}{rgb}{0.4, 0.66, 0.06}
    \definecolor{limeNine}{rgb}{0.36, 0.58, 0.05}

    % YELLOW
    \definecolor{yellowZero}{rgb}{1.0, 0.98, 0.86}
    \definecolor{yellowOne}{rgb}{1.0, 0.95, 0.75}
    \definecolor{yellowTwo}{rgb}{1.0, 0.93, 0.6}
    \definecolor{yellowThree}{rgb}{1.0, 0.88, 0.4}
    \definecolor{yellowFour}{rgb}{1.0, 0.83, 0.23}
    \definecolor{yellowFive}{rgb}{0.99, 0.77, 0.1}
    \definecolor{yellowSix}{rgb}{0.98, 0.69, 0.02}
    \definecolor{yellowSeven}{rgb}{0.96, 0.62, 0.0}
    \definecolor{yellowEight}{rgb}{0.94, 0.55, 0.0}
    \definecolor{yellowNine}{rgb}{0.9, 0.47, 0.0}

    % ORANGE
    \definecolor{orangeZero}{rgb}{1.0, 0.96, 0.9}
    \definecolor{orangeOne}{rgb}{1.0, 0.91, 0.8}
    \definecolor{orangeTwo}{rgb}{1.0, 0.85, 0.66}
    \definecolor{orangeThree}{rgb}{1.0, 0.75, 0.47}
    \definecolor{orangeFour}{rgb}{1.0, 0.66, 0.3}
    \definecolor{orangeFive}{rgb}{1.0, 0.57, 0.17}
    \definecolor{orangeSix}{rgb}{0.99, 0.49, 0.08}
    \definecolor{orangeSeven}{rgb}{0.97, 0.4, 0.03}
    \definecolor{orangeEight}{rgb}{0.91, 0.35, 0.05}
    \definecolor{orangeNine}{rgb}{0.85, 0.28, 0.06}

Respuesta1

Puede usar el comando \ifcase\monthpara definir los diferentes colores como:

\documentclass[12pt,a4paper]{book}


\usepackage[margin=2cm]{geometry}
\usepackage{xcolor}

\definecolor{grayOne}{rgb}{0.95, 0.95, 0.96}

\definecolor{coverBackground}{rgb}{0.952, 0.929, 0.858}
\definecolor{coverFont}{rgb}{0.223, 0.239, 0.313}

\usepackage[backgroundcolor=grayOne,linecolor=white]{mdframed}

\begin{document}

% define coverBackground and coverFont
  \ifcase\month\relax
%   \ValueWasZero
  \or % Jan
    \definecolor{coverBackground}{rgb}{0.952, 0.929, 0.858}
    \definecolor{coverFont}{rgb}{0.223, 0.239, 0.313}
  \or % feb
    \colorlet{coverBackground}{gray}
    \colorlet{coverFont}{red}
  \or % mar
    \colorlet{coverBackground}{blue}
    \colorlet{coverFont}{yellow}
  \or % Apr
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \or % Mai
    \colorlet{coverBackground}{pink}
    \colorlet{coverFont}{black}
  \or % Jun
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \or % Jul
    \definecolor{coverBackground}{rgb}{0.952, 0.929, 0.858}
    \definecolor{coverFont}{rgb}{0.223, 0.239, 0.313}
  \or % aug
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \or % sep
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \or % oct
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \or % nov
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \or % dec
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \else % error
    \colorlet{coverBackground}{red}
    \colorlet{coverFont}{green}
  \fi


\begin{titlepage}
  \begin{mdframed}[backgroundcolor=coverBackground]
    \centering
    \vspace*{.25\textheight}
    \textcolor{coverFont}{\Huge Page title}\\
    \vspace{10pt}\par
    \textcolor{coverFont}{\today}\\
    \vspace*{.25\textheight}
  \end{mdframed}
\end{titlepage}

\end{document}

Mostré ambos métodos, definiendo el color directamente con \definecolor{coverFont}o usando otros colores predefinidos con \colorlet{coverFont}. Utilicé colores estándar para mostrar la forma principal, cámbielos a los colores que necesite. La última \elsees solo tener una salida regular si no se reconoce un mes (no debería suceder, pero seguro, seguro...).

Con el MWE dado se obtiene el resultado:

portada resultante

Vale, lo siento, ya sé que el color duele... Pero para poner un ejemplo...

Respuesta2

Para implementar un mecanismo de bifurcación, puede hacer que LaTeX evalúe el parámetro entero \month.

El mecanismo de bifurcación puede basarse en \ifcase:

\documentclass{article}

\begin{document}

The date of compilation is: \today

\ifcase\month This should never be done.% <- case month = 0
\or This is done in January.% <- case month = 1
\or This is done in February.% <- case month = 2
\or This is done in March.% <- case month = 3
\or This is done in April.% <- case month = 4
\or This is done in May.% <- case month = 5
\or This is done in June.% <- case month = 6
\or This is done in July.% <- case month = 7
\or This is done in August.% <- case month = 8
\or This is done in September.% <- case month = 9
\or This is done in October.% <- case month = 10
\or This is done in November.% <- case month = 11
\or This is done in December.% <- case month = 12
\fi

\end{document}

También puedes usar algo como mi \KeepKthOfLArguments-macro:

\documentclass{article}

\makeatletter
%% Code for \KeepKthOfLArguments: 
%%=============================================================================
%% Paraphernalia:
%% \UD@firstoftwo, \UD@secondoftwo, \UD@PassFirstToSecond, \UD@CheckWhetherNull
%%=============================================================================
\newcommand\UD@firstoftwo[2]{#1}%
\newcommand\UD@secondoftwo[2]{#2}%
\newcommand\UD@PassFirstToSecond[2]{#2{#1}}%
%%-----------------------------------------------------------------------------
%% Check whether argument is empty:
%%.............................................................................
%% \UD@CheckWhetherNull{<Argument which is to be checked>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is empty>}%
%%                     {<Tokens to be delivered in case that argument
%%                       which is to be checked is not empty>}%
%%
%% The gist of this macro comes from Robert R. Schneck's \ifempty-macro:
%% <https://groups.google.com/forum/#!original/comp.text.tex/kuOEIQIrElc/lUg37FmhA74J>
\newcommand\UD@CheckWhetherNull[1]{%
  \romannumeral0\expandafter\UD@secondoftwo\string{\expandafter
  \UD@secondoftwo\expandafter{\expandafter{\string#1}\expandafter
  \UD@secondoftwo\string}\expandafter\UD@firstoftwo\expandafter{\expandafter
  \UD@secondoftwo\string}\expandafter\expandafter\UD@firstoftwo{ }{}%
  \UD@secondoftwo}{\expandafter\expandafter\UD@firstoftwo{ }{}\UD@firstoftwo}%
}%
%%=============================================================================
%% Keep only the K-th of L consecutive undelimited arguments.
%%   ( IF K < 1 OR K > L just remove L consecutive undelimited arguments. )
%%=============================================================================
%% \KeepKthOfLArguments{<integer number K>}%
%%                     {<integer number L>}%
%%                     <sequence of L consecutive undelimited arguments>
%%
%% If L < 1 yields nothing.
%% Else:
%%   If K >= 1 and K < L  yields:
%%     <K-th undelimited argument from <sequence of L consecutive undelimited 
%%      arguments>>
%%   If K < 1 or K > L
%%     (-> there is no K-th argument in the
%%         <sequence of L consecutive undelimited arguments> )
%%   yields nothing  but removal of <sequence of L consecutive 
%%          undelimited arguments>
\newcommand\KeepKthOfLArguments[2]{%
  \romannumeral0%
  % #1: <integer number K>
  % #2: <integer number L>
  \expandafter\UD@KeepKthOfLArgumentsKSmallerOneFork
  \expandafter{\romannumeral\number\number#1 000\expandafter}%
  \expandafter{\romannumeral\number\number#2 000}%
}%
%%-----------------------------------------------------------------------------
\newcommand\UD@KeepKthOfLArgumentsKSmallerOneFork[2]{%
  % #1: <K letters m>
  % #2: <L letters m >
  \UD@CheckWhetherNull{#1}{% K is smaller than one:
    \UD@KeepKthOfLArgumentsRemoveNArguments{#2}{ }{}%
  }{% K is not smaller than one:
    \expandafter\UD@PassFirstToSecond
    \expandafter{%
      \UD@firstoftwo{}#1%
    }{%
      \UD@KeepKthOfLArgumentsEvaluateLMinusKDifferenceLoop{#1}{#2}%
    }{#2}%
  }%
}%
%%-----------------------------------------------------------------------------
\newcommand\UD@KeepKthOfLArgumentsEvaluateLMinusKDifferenceLoop[4]{%
  % #1: <K letters m>  
  % #2: <L letters m>
  % (For detecting whether K>L or K<=L, during the loop letters m will
  %  be removed both from #1 and #2 until at least one of these arguments 
  %  is empty.
  %  When the loop terminates with 0<K<=L, #1 will be empty and #2
  %  will hold an amount of letters m corresponding to the the 
  %  difference L-K.
  %  When the loop terminates with K>L, #1 will not be empty and #2
  %  will be empty.
  % )
  % #3: <K-1 letters m>
  % #4: <L letters m>
  % (#3 and #4 will be left untouched during the loop so they can be 
  %  used for performing appropriate action when loop terminates as
  %  it is known whether K>L.)
  \UD@CheckWhetherNull{#1}{% We have K<=L:
     \UD@KeepKthOfLArgumentsRemoveNArguments{%
       #3%
      }{%
       \UD@KeepKthOfLArgumentsRemoveNArguments{#2}{ }%
      }{}%
  }{%
    \UD@CheckWhetherNull{#2}{% We have K>L:
      \UD@KeepKthOfLArgumentsRemoveNArguments{#4}{ }{}%
    }{% We don't know yet whether K<=L or K>L, thus remove letters m and 
      % do another iteration:
      \expandafter\UD@PassFirstToSecond
      \expandafter{%
        \UD@firstoftwo{}#2%
      }{%
        \expandafter\UD@KeepKthOfLArgumentsEvaluateLMinusKDifferenceLoop
        \expandafter{%
          \UD@firstoftwo{}#1%
        }%
      }{#3}{#4}%
    }%
  }%
}%
%%-----------------------------------------------------------------------------
%% \UD@KeepKthOfLArgumentsRemoveNArguments{<N letters m>}%
%%                                        {<argument 1>}%
%%                                        {<argument 2>}%
%%                                        <sequence of consecutive 
%%                                         undelimited arguments>
%%.............................................................................
%% Removes the first N undelimited arguments from the <sequence of 
%% consecutive undelimited arguments>, then inserts  
%% <argument 1><argument 2>
%%
%% On the one hand when providing <argument 2> empty, you can use 
%% <argument 1> for nesting calls to \UD@KeepKthOfLArgumentsRemoveNArguments.
%% On the other hand you can provide a <space token> for stopping
%% \romannumeral-expansion as  <argument 1> and have the
%% macro grab the <K-th undelimited argument> from the <sequence of L 
%% consecutive undelimited arguments> as <argument 2>.
%%
\newcommand\UD@KeepKthOfLArgumentsRemoveNArguments[3]{%
  %% #1: <N letters m>  
  %% #2: <Argument 1>   
  %% #3: <Argument 2>
  \UD@CheckWhetherNull{#1}{#2#3}{%
    \UD@firstoftwo{%
      \expandafter\UD@KeepKthOfLArgumentsRemoveNArguments
      \expandafter{%
        \UD@firstoftwo{}#1%
      }{#2}{#3}%
    }%
  }%
}%
%%-----------------------------------------------------------------------------
%% End of code for \KeepKthOfLArguments.
%%-----------------------------------------------------------------------------
\makeatother

\newcommand\Monthfork{%
  \KeepKthOfLArguments{\month}{12}%
}%

\begin{document}

The date of compilation is: \today

\Monthfork{%
  This is done in January.%
}{%
  This is done in February.%
}{%
  This is done in March.%
}{%
  This is done in April.%
}{%
  This is done in May.%
}{%
  This is done in June.%
}{%
  This is done in July.%
}{%
  This is done in August.%
}{%
  This is done in September.%
}{%
  This is done in October.%
}{%
  This is done in November.%
}{%
  This is done in December.%
}%

\end{document}

ingrese la descripción de la imagen aquí

información relacionada