![moderncv:如何提取样式信息并在 if 语句中使用它](https://linux22.com/image/357395/moderncv%EF%BC%9A%E5%A6%82%E4%BD%95%E6%8F%90%E5%8F%96%E6%A0%B7%E5%BC%8F%E4%BF%A1%E6%81%AF%E5%B9%B6%E5%9C%A8%20if%20%E8%AF%AD%E5%8F%A5%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%AE%83.png)
我使用 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{}{}
测试,因为它\pdfstrcmp
是pdftex
原始的。
\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 还是提供了框架来让它首先工作。