さまざまな回顧録の表紙を自動的にカスタマイズする

さまざまな回顧録の表紙を自動的にカスタマイズする

同じ形式の回顧録をいくつか作成する必要があります。各ドキュメントについて、表紙のいくつかの特徴、たとえば背景色をカスタマイズしたいと考えています。ドキュメントのプリアンブルでドキュメント タイプ\doctype(タイプ 1 またはタイプ 2 とします) をエンコードする変数を定義し、コマンドを使用して\IfStrEqCaseドキュメント タイプを適切な色にマッピングすることで、表紙のカスタマイズを自動化しようとしています。これが私の簡略化された MWE です。

マイテンプレート.tex

\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{xstring}
\usepackage{tikz}
\usepackage{lipsum}

マイカバー

\newcommand\CoverBackgroundColor{%
\IfStrEqCase{\doctype}{
    {one}{red}
    {two}{green}
    [gray]
}}

\begin{tikzpicture}[overlay, remember picture]
\fill[\CoverBackgroundColor] (current page.south west) rectangle (current page.north east);
\end{tikzpicture}
\thispagestyle{empty}
\clearpage

doc1.tex

\documentclass[12pt,a4paper,oneside]{memoir}

\input{mytemplate}
\newcommand{\doctype}{one}

\begin{document}

\input{mycover}
\lipsum[1]

\end{document}

doc2.tex

\documentclass[12pt,a4paper,oneside]{memoir}

\input{mytemplate}
\newcommand{\doctype}{two}

\begin{document}

\input{mycover}
\lipsum[2]

\end{document}

の表紙はdoc1赤、 の表紙はdoc2緑になると思っていましたが、次のエラーが表示されます:

<to be read again> 
1
l.9 \fill[\CoverBackgroundColor]
                               (current page.south) rectangle (current page....

? 

ここで何が欠けているのでしょうか?

答え1

問題は\CoverBackgroundColorない色ではなく、一連の指示に展開します印刷色の名前。

のコードをmycover.tex次のように置き換えます。

%%% mycover.tex
\ExplSyntaxOn
\NewExpandableDocumentCommand\CoverBackgroundColor{}
 {
  \str_case_e:nnF {\doctype}
   {
    {one}{red}
    {two}{green}
   }
   {gray}
 }
\ExplSyntaxOff

\begin{tikzpicture}[overlay, remember picture]
\fill[\CoverBackgroundColor] (current page.south west) rectangle (current page.north east);
\end{tikzpicture}
\thispagestyle{empty}
\clearpage
%%%

あなたしないやりたいこと\include{mytemplate}。 を使用してください\input

関連情報