moderncv:如何提取样式信息并在 if 语句中使用它

moderncv:如何提取样式信息并在 if 语句中使用它

我使用 moderncv 制作我的简历,并根据这篇文章的建议,更改了经典风格和休闲风格的标题(但没有更改其他三种风格):

Moderncv 将出生日期添加到个人信息中

就布局而言,这很有魅力。我将每个更改的\makecvhead{}宏放在一个单独的文件中,将它们放在主 LaTeX 文档中\input,如果我想要经典或休闲风格,我必须相应地删除注释:

%\input{dateofbirth_for_casual}
\input{dateofbirth_for_classic}

为了学习一些新东西,并且为了简单起见,现在我只想改变样式\moderncvstyle{},其余的应该自动处理,即根据需要使用适当的标题。

问题可以归结为:

我如何以编程方式提取用户(即我自己)定义的样式并在 if 语句中使用它?

像这样:

\ifthenelse{\equal{\@moderncvstyle}{classic}}{
    %do something because it's classic
}{}
\ifthenelse{\equal{\@moderncvstyle}{casual}}{
    %do something because it's casual
}{}

通过扫描“moderncv.cls”的代码和包中的其他文件,我不知道值\moderncvstyle{}存储在哪里,我不知道我的测试是否正常,或者我是否必须将测试条件放在引号中或任何其他东西中..?

\ifthenelse{\equal{**WHAT IS THE STYLE?**}{"casual"}}{
    %do something because it's casual
}{}

最后,我只想要一个文件,因为\input我每次都会使用,并且不想再关心使用了哪个更改的标题:

\input{dateofbirth_for_classic_or_casual}

谢谢!


伪代码无法工作:

\documentclass[12pt]{moderncv}
\moderncvstyle{casual}

% Pseudo-Code starts here:

% If style = casual
% do this
% if style = classic
% do that
% if style = banking or fancy or oldstyle
% do nothing    

\name{John}{Doe}
\address{111 Mimimi}{Here}{Somewhere}
\phone[mobile] {+01~(0)123 456789}
\email{[email protected]} 
\begin{document}
\makecvtitle
\end{document}

答案1

加载的样式\moderncvstyle未存储到某些宏中,但可以通过修补来更改\moderncvstyle

中的定义moderncv.cls

\newcommand*{\moderncvstyle}[2][]{
  \RequirePackage[#1]{moderncvstyle#2}}

因此基本上,捕获第二个参数并重新定义一个存储宏就足够了,比如说\@moderncvstyle可以稍后进行评估。

我在这里使用了传统\ifnum0=\pdfstrcmp{}{}测试,因为它\pdfstrcmppdftex原始的。

\documentclass[12pt]{moderncv}

\usepackage{xpatch}

\makeatletter
\providecommand{\@moderncvstyle}{}
\providecommand{\@moderncvstyleoptions}{}
\xapptocmd{\moderncvstyle}{%
  \renewcommand{\@moderncvstyleoptions}{#1}{}{}
  \renewcommand{\@moderncvstyle}{#2}{}{}
}
\makeatother

\moderncvstyle{banking}


\makeatletter

\ifnum0=\pdfstrcmp{\@moderncvstyle}{casual}
\typeout{Yes, it's casual type}
\else
\ifnum0=\pdfstrcmp{\@moderncvstyle}{classic}
\typeout{Yes, it's classic type}
\else
\ifnum0=\pdfstrcmp{\@moderncvstyle}{banking}
\typeout{Yes, it's banking type}
\fi
\fi
\fi
\makeatother

% Pseudo-Code starts here:

% If style = casual
% do this
% if style = classic
% do that
% if style = banking or fancy or oldstyle
% do nothing    

\name{John}{Doe}
\address{111 Mimimi}{Here}{Somewhere}
\phone[mobile] {+01~(0)123 456789}
\email{[email protected]} 
\begin{document}
\makecvtitle
\end{document}

答案2

如果有人也需要添加出生日期和家庭状况的功能,我在这里发布了一个示例,其中包含适合所有五种风格的标题:

https://tex.stackexchange.com/a/376850/136789

奇怪的是,这个变体\ifnum0=\pdfstrcmp对我来说不起作用,所以我使用了它,\ifthenelse但尽管如此,@christian-hupfer 还是提供了框架来让它首先工作。

相关内容