在(新)环境中使用宏

在(新)环境中使用宏

我正在编写简历,并尝试将工作/教育列表格式化为如下所示的内容:

公司或大学(地点)
所获职位或学位
我在那里做了一些事情的描述。

我已经输入了足够多的内容,我想定义一个环境来处理格式,这样我就不必对其进行硬编码(并且/或者当我改变主意时必须单独重新执行每一个!)。也就是说,我希望能够做类似的事情

\begin{job}
\institution{Company or University}
\location{Location}
\position{Job title or degree received}
\description{Some description of what I did there.}
\end{job}

并让其输出上述内容。我有点盲目地尝试使用例如为 \institution、\location、\position 等定义新命令

\def\institution#1{\gdef{\@institution}{#1}}

然后创建一个新的环境,在“后环境”代码中执行格式化,如下所示:

\newenvironment{job}{}{\textbf{\@institution}}

我把这两个都放在\makeatletter...\makeatother块中,我的文档在序言中编译得很好。但是,当我尝试实际使用此环境时,例如插入

\begin{job}
\institution{Someplace I worked}
\end{job}

在文档正文的某处,我收到一条错误消息

Missing control sequence inserted: <inserted text> 
\inaccessible

当它读到这一\institution{Someplace I worked}行,然后读到第二行

Undefined control sequence: <recently read> \@institution

当它读到该\end{job}行时。

所以,显然我这种天真的方法并不奏效 —— 还有更好的方法可以解决这个问题吗?

答案1

这里有几个想法 - 一个是使用\newcommand,另一个是使用\newenvironment;也许你可以根据自己的需要进行调整

截屏

代码:

\documentclass{article}

% as a command
\newcommand{\job}[4]{% 1: company, 2: location, 3: title, 4: description
    \noindent\begin{tabular}{@{}l}%
    \bfseries{#1 (#2)}\\
    \itshape{#3}\\
    #4
    \end{tabular}%
}

% or perhaps an environment
\newenvironment{myjob}[3]{% 1: company, 2: location, 3: title
    \noindent\begin{tabular}{@{}p{\textwidth}@{}}%
    \bfseries{#1 (#2)}\\
    \itshape{#3}\\
        }%
    {%
    \end{tabular}%
    }

\begin{document}

\job{Company or University}%
    {Location}%
    {Job title or degree received}%
    {Some description of what I did there.}

\begin{myjob}{Another institution}%
    {Somewhere else}%
    {Another thing}%
    Long description of stuff| could be anything
    \begin{itemize}
        \item discovered
        \item a 
        \item few
        \item important
        \item things
    \end{itemize}
\end{myjob}

\end{document}

相关内容