我正在尝试定义两个环境,一个在另一个中使用。第一个是简历中的一个部分,第二个是子部分(cvitem)。后者包含一个无序列表(暂时注释掉,以隔离问题)。子部分应该是两列,我尝试使用表格来创建,这样所有子部分都可以对齐在一起。cvitem 就是这个表格中的行。
\documentclass[12pt]{article}
\usepackage{array}
\usepackage{ragged2e}
\newcolumntype{L}[1]{>{\RaggedRight\arraybackslash}p{#1}}
\newenvironment{cvsection}[1]{
{ \Large \bf #1 }
\hrule height 0.5pt
\begin{tabular}{@{}>{}L{.25\linewidth}L{.75\linewidth}@{}}
} {
\end{tabular}
}
\newenvironment{cvitem}[4]{
#3 \linebreak #4 & {\bf #1}, #2 \linebreak \\
%\begin{itemize}
} {
%\end{itemize}
}
\begin{document}
\begin{cvsection}{Education}
\begin{cvitem}{xxx}{xx}{xx}{xx}
%\item x
\end{cvitem}
\end{cvsection}
\end{document}
当我将 cvitem 重写为 时newcommand
,代码编译成功。但由于我想插入一个列表,所以它应该是一个环境。我尝试将 cvitem 定义为命令,并使用包将其转换为环境environ
,但这导致了相同的错误。
答案1
您不能在环境&
形成的组中发出问题cvitem
。
利用environ
一些\aftergroup
技巧你就能做到。
\documentclass[12pt]{article}
\usepackage{array}
\usepackage{ragged2e}
\usepackage{environ}
\newcolumntype{L}[1]{>{\RaggedRight\arraybackslash}p{#1}}
\newenvironment{cvsection}[1]
{%
{\Large\bfseries #1}\vskip3pt\hrule height 0.5pt
\begin{tabular}{@{}>{}L{.25\linewidth}L{.75\linewidth}@{}}
}
{\end{tabular}}
\NewEnviron{cvitem}[4]{%
\xdef\cvitembody{%
\unexpanded{#3\par#4 & {\bfseries #1}, #2\tabularnewline}%
\noexpand\begin{itemize}%
\unexpanded\expandafter{\BODY}%
\noexpand\end{itemize}\noexpand\tabularnewline
}%
\aftergroup\cvitembody
}
\begin{document}
\begin{cvsection}{Education}
\begin{cvitem}{xxx}{xx}{xx}{xx}
\item x
\end{cvitem}
\end{cvsection}
\end{document}
答案2
我想到了一个解决方法,使用命令而不是环境。我不明白为什么这样做有效,而原始问题中的代码却无效。
\documentclass[12pt]{article}
\usepackage{array}
\usepackage{ragged2e}
\usepackage{enumitem}
\newcolumntype{L}[1]{>{\RaggedRight\arraybackslash}p{#1}}
\newenvironment{cvsection}[1]{
{ \Large \bf #1 }
\hrule height 0.5pt
\begin{tabular}{@{}>{}L{.25\linewidth}L{.75\linewidth}@{}}
} {
\end{tabular}
}
\newcommand{\cvitembegin}[4]{
#3 \linebreak #4 &
{\bf #1}, #2 \linebreak
\begin{itemize}[noitemsep,nolistsep]
}
\newcommand{\cvitemend}{
\end{itemize}\\
}
\begin{document}
\begin{cvsection}{Education}
\cvitembegin{xxx}{xx}{xx}{xx}
\item x
\cvitemend
\end{cvsection}
\end{document}