定义自定义命令来包装 easylist

定义自定义命令来包装 easylist

我已经安装了该easylist软件包并且使用得很好。我尝试创建一个自定义命令来缩短我的输入时间,就像我之前使用常规命令所做的那样\begin{itemize}

我常用的一个方法是:

\newcommand{\itml}[1]{\begin{itemize} #1 \end{itemize}}

我这样使用:

\itml{
    \item first item
    \item second item
}

那个不是工作:

\newcommand{\el}[1]{\begin{easylist}[itemize] #1 \end{easylist}}

用作时:

\el{
    # first item
    ## second item
}

我收到以下错误:

! You can't use `macro parameter character #' in vertical mode.
<argument>  ##
           first item #### Second item
l.44 }

什么确实有效是:

\newcommand{\bel}{\begin{easylist}[itemize]}
\newcommand{\eel}{\end{easylist}}

用作时:

\bel
    # first item
    ## second item
\eel

基本上,我想要输入结束标签吗?

更新:我将所有自定义命令放在单独的文件中,如下所示:

% commands.tex file
\newcommand{\avgE}{\bar{E}}

...

\newcommand{\bel}{\begin{easylist}[itemize]}
\newcommand{\eel}{\end{easylist}}
\newcommand{\el@aux}[1]{\begin{easylist}[itemize] #1 \end{easylist}\endgroup}
\newcommand{\el}{\begingroup\Activate\el@aux}
\newcommand{\bl}[1]{\bel #1 \eel}
\newcommand{\itml}[1]{\begin{itemize} #1 \end{itemize}}

在我的常规文件中,我说:

% regular latex file
\documentclass[11pt,letterpaper]{article}
...
\input{../src/commands.tex}
....

当我在常规文件中尝试它时出现以下错误:

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.25 ...list}[itemize] #1 \end{easylist}\endgroup}

这是否意味着我必须在每个“常规”文件中声明这些自定义命令,而不能将其放在所有文件的一个位置?

答案1

#这是一种获取您想要的方法 -在读取宏参数之前本地更新类别代码。easylist\Activate通过(和配套的)提供此功能\Deactivate,更新所需“项目字符”的类别代码:

在此处输入图片描述

\documentclass{article}
\usepackage[sharp]{easylist}% http://ctan.org/pkg/easylist

% Environment-style definitions
\newcommand{\bel}{\begin{easylist}[itemize]}
\newcommand{\eel}{\end{easylist}}

% Macro-style definitions
\makeatletter
\newcommand{\el@aux}[1]{\begin{easylist}[itemize] #1 \end{easylist}\endgroup}
\newcommand{\el}{\begingroup\Activate\el@aux}
\makeatletter
\begin{document}

\el{
  # first item
  ## second item
}

\bel
  # first item
  ## second item
\eel
\end{document}

\begingroup使用...子句可以确保本地更新\endgroup(因此从技术上来说不需要“关闭” \Deactivate)。\el实际上只启动该过程,而\el@aux是实际吞噬要传递给 的参数的宏easylist

以下是一些相关参考资料:

相关内容