Мне нужно создать несколько мемуаров в одном формате. Для каждого документа я хочу настроить несколько элементов передней обложки, например цвет фона. Я пытаюсь автоматизировать настройку передней обложки, определив в преамбуле документов переменную, \doctype
которая кодирует тип документа (скажем, тип один или тип два), и используя \IfStrEqCase
команду для сопоставления типа документа с соответствующим цветом. Вот мой упрощенный MWE:
мойшаблон.tex
\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{xstring}
\usepackage{tikz}
\usepackage{lipsum}
mycover.tex
\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
.