現在の月に基づいて表紙の色を定義する

現在の月に基づいて表紙の色を定義する

私はスタイル ガイドのドキュメントを作成しており、表紙の色を使用してドキュメントの更新内容を視覚的に魅力的にしたいと考えています。

主なアイデアは、ドキュメントがコンパイルされた月に基づいて表紙の色を自動的に更新することです。

カバーの色はcoverBackgroundおよびとして定義されます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}

また、多数の色を定義したユーティリティ ファイルもあるので、それらを使用すると便利です。

    %--------------------------------------------
    %   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}

答え1

次のようなコマンドを使用して\ifcase\month、さまざまな色を定義できます。

\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}

私は、を使用して色を直接定義する方法と\definecolor{coverFont}、を使用して他の定義済み色を使用する方法の両方を示しました\colorlet{coverFont}。私は主な方法を示すために標準色を使用しましたが、それを必要な色に変更してください。最後は、\else月が認識されない場合にのみ定期的に終了することです (発生するべきではありませんが、確実に発生します...)。

与えられた MWE を使用すると、次の結果が得られます。

結果として得られるタイトルページ

はい、すみません、色が痛いのはわかっています...でも例として...

答え2

フォークメカニズムを実装するには、LaTeX で整数パラメータを評価できます\month

フォークメカニズムは以下に基づきます\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}

私の\KeepKthOfLArgumentsマクロのようなものを使用することもできます:

\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}

ここに画像の説明を入力してください

関連情報