1

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}

Caption is not centred

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}

Caption centred

2
  • What kind of format were you going after with each different mode? Apr 2, 2014 at 14:39
  • For resume mode I thought of this format: \moderncvstyle{banking} \moderncvcolor{blue} \usepackage[scale=0.85]{geometry} and for CV mode this one: \moderncvstyle{casual} \moderncvcolor{green} \usepackage[scale=0.75]{geometry} I thought that all these formats should be working with the same logic behind line 39 - just that I can't get this one to work in dependence on the resumemode.
    – Mil
    Apr 2, 2014 at 14:55

1 Answer 1

2

Try this:

\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{blue}
    \usepackage[scale=0.85]{geometry}
  } {
    \moderncvstyle{casual}
    \moderncvcolor{green}
    \usepackage[scale=0.75]{geometry}
  }
}
\ExplSyntaxOff

\usepackage[utf8]{inputenc}  

\name{Mil}{Test}
\phone[fixed]{+2~(345)~678~901}
\phone[fax]{+3~(456)~789~012}

\ResumeMode[false]
\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}

Since resume-mode might not be set in the preamble yet but must be by the time the document properly starts, we wrap it in the \AtBeginDocument hook. (Note also that this obsoletes my use of the \exp_args: construction; the current implementation is at least much clearer, even if at the cost of an epsilon-bit of memory efficiency. ;))

8
  • Perfect, that is a very nice solution - and one that I understand! Thank you! :)
    – Mil
    Apr 3, 2014 at 6:15
  • There is just one slight problem: If I change the formatting to for example \usepackage[scale=0.9,top=0.9cm,bottom=0.5cm]{geometry} the title is not centred but scaled more to the left. If however I place the geometry options outside the ExplSyntax it works normally. How could that possibly be?
    – Mil
    Apr 3, 2014 at 6:24
  • @Mil Interesting; I'll see if I can take a look at it later today. If it isn't in your post already, can you edit in an example of this happening? One thing to note is that under the special syntax, white space doesn't count. Apr 3, 2014 at 12:59
  • Thank you for looking into it - this is really weird! I updated the initial post with an example. White space should not be the problem I think.
    – Mil
    Apr 4, 2014 at 6:45
  • Do you happen to have any ideas on this issue?
    – Mil
    Apr 11, 2014 at 15:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .