We busily discussed a method of implementing conditional statements in the moderncv class (Conditional content in moderncv) last month.
Sean Allred came up with a great solution to solve this (see MWE attached). However I struggle with the implementation of also conditional formatting (for resumemode=true and =false). In the current code, the formatting is taken as defined in line 39, but for both (true and false) cases:
\exp_args:No \moderncvcolor{\bool_if:NTF \l_mil_resume_mode_bool {green}{blue}}
Does anyone have an idea about how to solve this or where the problem might be?
Cheers, Mil
\documentclass[11pt,a4paper,sans]{moderncv}
%DEFINITIONS FOR RESUME <-> CV MODE
\usepackage{expl3,xparse}
\ExplSyntaxOn
\keys_define:nn { mil / resume } { % from `expl3`
start .tl_set:N = \l_mil_resume_start_tl,
end .tl_set:N = \l_mil_resume_end_tl,
degree .tl_set:N = \l_mil_resume_degree_tl,
institution .tl_set:N = \l_mil_resume_institution_tl,
city .tl_set:N = \l_mil_resume_city_tl,
grade .tl_set:N = \l_mil_resume_grade_tl,
resume-text .tl_set:N = \l_mil_resume_resumetext_tl,
cv-text .tl_set:N = \l_mil_resume_cvtext_tl,
resume-mode .bool_set:N = \l_mil_resume_mode_bool
}
\NewDocumentCommand \ResumeMode { O{true} } { % from `xparse`
\keys_set:nn { mil / resume } { resume-mode = #1 }
}
\NewDocumentCommand \CVEntry { m } {
\group_begin:
\keys_set:nn { mil / resume } { #1 }
\cventry{\l_mil_resume_start_tl--\l_mil_resume_end_tl}
{\l_mil_resume_degree_tl}
{\l_mil_resume_institution_tl}
{\l_mil_resume_city_tl}
{\l_mil_resume_grade_tl}
{
\bool_if:NTF \l_mil_resume_mode_bool {
\l_mil_resume_resumetext_tl
} {
\l_mil_resume_cvtext_tl
}
}
\group_end:
}
\exp_args:No \moderncvcolor{\bool_if:NTF \l_mil_resume_mode_bool {green}{blue}}
\ExplSyntaxOff
\usepackage[utf8]{inputenc}
\moderncvstyle{banking}
\ResumeMode[false] %true => generates RESUME; false => generates CV
%Personal Details
\name{Mil}{Test}
\phone[fixed]{+2~(345)~678~901}
\phone[fax]{+3~(456)~789~012}
\begin{document}
\makecvtitle
\CVEntry{
start=1993,
end=2005,
degree=B.\,S.,
institution=\TeX\ StackExchange,
city=Internet,
grade=Grade,
resume-text=resume text,
cv-text=cv text,
}
\CVEntry{
start=1993,
end=2005,
degree=B.\,S.,
institution=\TeX\ StackExchange,
city=Internet,
grade=Grade,
resume-text=resume text,
cv-text=cv text,
resume-mode=true, %will always show resume text
}
\end{document}
Edit April 4th: Sean Allred offered a very nice solution to this problem (see below), but it creates some confusing compilation issues (at least for me). Have a look at these two slightly modified (only the formatting part) examples based on his suggestion:
a) Direct Implementation
\documentclass[11pt,a4paper,sans]{moderncv}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\keys_define:nn { mil / resume } {
start .tl_set:N = \l_mil_resume_start_tl,
end .tl_set:N = \l_mil_resume_end_tl,
degree .tl_set:N = \l_mil_resume_degree_tl,
institution .tl_set:N = \l_mil_resume_institution_tl,
city .tl_set:N = \l_mil_resume_city_tl,
grade .tl_set:N = \l_mil_resume_grade_tl,
resume-text .tl_set:N = \l_mil_resume_resumetext_tl,
cv-text .tl_set:N = \l_mil_resume_cvtext_tl,
resume-mode .bool_set:N = \l_mil_resume_mode_bool
}
\NewDocumentCommand \ResumeMode { O{true} } {
\keys_set:nn { mil / resume } { resume-mode = #1 }
}
\NewDocumentCommand \CVEntry { m } {
\group_begin:
\keys_set:nn { mil / resume } { #1 }
\cventry{\l_mil_resume_start_tl--\l_mil_resume_end_tl}
{\l_mil_resume_degree_tl}
{\l_mil_resume_institution_tl}
{\l_mil_resume_city_tl}
{\l_mil_resume_grade_tl}
{
\bool_if:NTF \l_mil_resume_mode_bool {
\l_mil_resume_resumetext_tl
} {
\l_mil_resume_cvtext_tl
}
}
\group_end:
}
% < -- CHANGE HERE -- > %
\AtBeginDocument{
\bool_if:NTF \l_mil_resume_mode_bool {
\moderncvstyle{banking}
\moderncvcolor{black}
\usepackage[scale=0.9,top=0.9cm,bottom=0.5cm]{geometry}
} {
\moderncvstyle{casual}
\moderncvcolor{green}
\usepackage[scale=0.85]{geometry}
}
}
\ExplSyntaxOff
\usepackage[utf8]{inputenc}
\firstname{Mil}
\familyname{Longer title to see it better}
\ResumeMode[true] %False=CV - True=RESUME
\begin{document}
\makecvtitle
\vspace*{-10mm}
\CVEntry{
start=1993,
end=2005,
degree=B.\,S.,
institution=\TeX\ StackExchange,
city=Internet,
grade=Grade,
resume-text=resume text,
cv-text=cv text,
}
\CVEntry{
start=1993,
end=2005,
degree=B.\,S.,
institution=\TeX\ StackExchange,
city=Internet,
grade=Grade,
resume-text=resume text,
cv-text=cv text,
resume-mode=true, %will always show resume text
}
\end{document}
b) Formatting Options placed somewhere else
\documentclass[11pt,a4paper,sans]{moderncv}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\keys_define:nn { mil / resume } {
start .tl_set:N = \l_mil_resume_start_tl,
end .tl_set:N = \l_mil_resume_end_tl,
degree .tl_set:N = \l_mil_resume_degree_tl,
institution .tl_set:N = \l_mil_resume_institution_tl,
city .tl_set:N = \l_mil_resume_city_tl,
grade .tl_set:N = \l_mil_resume_grade_tl,
resume-text .tl_set:N = \l_mil_resume_resumetext_tl,
cv-text .tl_set:N = \l_mil_resume_cvtext_tl,
resume-mode .bool_set:N = \l_mil_resume_mode_bool
}
\NewDocumentCommand \ResumeMode { O{true} } {
\keys_set:nn { mil / resume } { resume-mode = #1 }
}
\NewDocumentCommand \CVEntry { m } {
\group_begin:
\keys_set:nn { mil / resume } { #1 }
\cventry{\l_mil_resume_start_tl--\l_mil_resume_end_tl}
{\l_mil_resume_degree_tl}
{\l_mil_resume_institution_tl}
{\l_mil_resume_city_tl}
{\l_mil_resume_grade_tl}
{
\bool_if:NTF \l_mil_resume_mode_bool {
\l_mil_resume_resumetext_tl
} {
\l_mil_resume_cvtext_tl
}
}
\group_end:
}
% < -- CHANGE HERE -- > %
\AtBeginDocument{
\bool_if:NTF \l_mil_resume_mode_bool {
\moderncvstyle{banking}
\moderncvcolor{black}
% \usepackage[scale=0.9,top=0.9cm,bottom=0.5cm]{geometry}
} {
\moderncvstyle{casual}
\moderncvcolor{green}
\usepackage[scale=0.85]{geometry}
}
}
\ExplSyntaxOff
\usepackage[utf8]{inputenc}
\firstname{Mil}
\familyname{Longer title to see it better}
\usepackage[scale=0.9,top=0.9cm,bottom=0.5cm]{geometry}
\ResumeMode[true] %False=CV - True=RESUME
\begin{document}
\makecvtitle
\vspace*{-10mm}
\CVEntry{
start=1993,
end=2005,
degree=B.\,S.,
institution=\TeX\ StackExchange,
city=Internet,
grade=Grade,
resume-text=resume text,
cv-text=cv text,
}
\CVEntry{
start=1993,
end=2005,
degree=B.\,S.,
institution=\TeX\ StackExchange,
city=Internet,
grade=Grade,
resume-text=resume text,
cv-text=cv text,
resume-mode=true, %will always show resume text
}
\end{document}