我已经安装了该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
。
以下是一些相关参考资料: