如何创建新命令,但避免在序言中使用 \newcommand

如何创建新命令,但避免在序言中使用 \newcommand

我正在使用类制作演示幻灯片的乳胶模板beamer

我想允许人们在主文件中的 行之前输入他们email address的。employee_idtex\begin{document}

我知道以下代码,但它显示\newcommand在序言中。我认为这不是一个干净的模板。

\documentclass{beamer}
\title{Latex Template for Presentation Slides}
\date{7 February 2018}
\author{My Name}
\newcommand{\email}{[email protected]}
\newcommand{\employeeid}{ID: 123456}

\begin{document}

\begin{frame}
    \insertauthor
    \email
    \employeeid
\end{frame}

\end{document}

\newcommand{\email}{}我想要以下方式。并且和的定义\newcommand{\employeeid}应该添加到beamerinnerthememytheme.sty文件中,并且用户只应在主.tex文件中提供他们的信息。

\documentclass{beamer}
\title{Latex Template for Presentation Slides}
\date{7 February 2018}
\author{My Name}
\email{[email protected]}
\employeeid{12345678}

\begin{document}

\begin{frame}
    \insertauthor
    \email
    \employeeid
\end{frame}

\end{document}

我看过帖子投影仪类中的电子邮件字段?,但这不是我想要的。我想要:

  1. 不仅仅是电子邮件地址(例如员工 ID)
  2. 电子邮件地址、员工 ID 可以显示在与作者姓名不同的位置/幻灯片中。

你知道如何定义这样的命令\email\employeeid吗?

谢谢!

答案1

定义一些包装宏,将电子邮件和员工 ID 存储到某个位置。如果是内部的,请@在宏名称中使用一些宏,并将其放置\makeatletter...\makeatother在文件中.sty

\newcommand{\email}[1]{\gdef\email@internal{#1}}

定义\email@internal为内容——这是使用LaTeX 核心的#1方法。\@title\@author

我建议使用\insertemail\insertemployeeid作为类似于的名称\insertauthor

\documentclass{beamer}
\title{Latex Template for Presentation Slides}
\date{7 February 2018}
\author{My Name}

\makeatletter
%First empty definitions
\def\email@internal{}
\def\employeeid@internal{}
\newcommand{\email}[1]{\gdef\email@internal{#1}}
\newcommand{\employeeid}[1]{\gdef\employeeid@internal{#1}}
\newcommand{\insertemail}{\email@internal}
\newcommand{\insertemployeeid}{\employeeid@internal}
\makeatother 

\email{gandalf@mordor}
\employeeid{ID: 123456}

\begin{document}

\begin{frame}
    \insertauthor

    \insertemail

    \insertemployeeid
\end{frame}

\end{document}

在此处输入图片描述

答案2

标准大概是这样的:

\makeatletter
\newcommand{\email}[1]{\gdef\@email{#1}}
\makeatother

然后宏\@email保留给予的值\email

相关内容