我的背景是软件开发和面向对象编程。因此,我遇到了以下关于 LaTeX 的问题。
我得到了以下命令,它定义了联系人的属性。
\usepackage{tabularx}
\usepackage{xkeyval}
\usepackage{hyperref}
% define the key (arguments)
\makeatletter
\define@key{personkeys}{name}{%
\def\personname{#1}
}
\define@key{personkeys}{phone}{%
\def\personphone{#1}
}
\define@key{personkeys}{email}{%
\def\personemail{#1}
}
\makeatother
% end of key definition
\newcommand{\contact}[2][]{%
\setkeys{personkeys}{#1}%
\personname \newline
\href{mailto:\personemail}{\nolinkurl{\personemail}} \newline
\personphone \bigskip
}
然后,该命令用于指定文档中经常使用的人员。然后,可以通过命令 \johndoe 访问此类人员。
\newcommand{\johndoe}{
\contact[
name={Mr John Doe},
email={[email protected]},
phone={+00 00 012345}
];
}
问题是,有些人愿意填写他们的电话号码,而有些人则不愿意。不过,我希望在命令中填写号码,只需设置一个标志,例如隐藏电话然后由命令定义进行解释。
\newcommand{\johndoe}{
\contact[
name={Mr John Doe},
email={[email protected]},
phone={+00 00 012345},
hidePhone=True
];
}
问题:有没有办法让命令根据标志显示或隐藏文本?否则我只能将电话号码和/或电子邮件地址留空。
答案1
您可以这样做(进一步利用-package xkeyval
):
\documentclass{article}
\usepackage{tabularx}
\usepackage{xkeyval}
\usepackage{hyperref}
% define the key (arguments)
\makeatletter
\define@key{personkeys}{name}{%
\def\personname{#1}
}
\define@key{personkeys}{phone}{%
\def\personphone{#1}
}
\define@key{personkeys}{email}{%
\def\personemail{#1}
}
\define@boolkey{personkeys}[my]{hidePhone}{}
\makeatother
% end of key definition
\newcommand{\contact}[2][]{%
\setkeys{personkeys}{#1}%
\personname \newline
\href{mailto:\personemail}{\nolinkurl{\personemail}} \ifmyhidePhone\else\newline
\personphone \fi\bigskip
}
\newcommand{\johndoe}{
\contact[
name={Mr John Doe},
email={[email protected]},
phone={+00 00 012345},
hidePhone=True
];
}
\newcommand{\janedoe}{
\contact[
name={Ms Jane Doe},
email={[email protected]},
phone={+00 00 012345},
hidePhone=False
];
}
\begin{document}
\johndoe
\janedoe
\end{document}