我正在尝试定义一个新命令来定制 LaTeX 中基于项目的行为,如下所示:
\newcommand{\myitemize}[2]{
\begin{description}
\item[$\{#1}$]{#2}
\end{description}
}
它应该被称为:
\myitemize{bullet}{matinking}
但是出现如下错误,导致文档无法编译:
! LaTeX Error: Missing \begin{document}.
问题似乎出在命令中的\begin
&的使用上。\end
你能指导我如何处理这个案子吗?
提前致谢...
PS. 我在 之前声明了新命令\begin{document}
。
答案1
您的代码存在问题,因为您在命令定义中将\{
和匹配。和用于创建一个组,而和可用于排版几个括号。出现错误消息是因为您关闭了一个尚未打开的组。}
{
}
\{
\}
确实,以下代码可以工作并打印括号内的第一个参数。但是,查看您的示例用法,它可能没有达到您的预期效果:
\documentclass{article}
\newcommand{\myitemize}[2]{
\begin{description}
\item[$\{#1\}$]{#2}
\end{description}
}
\begin{document}
\myitemize{bullet}{matinking}
\end{document}
我猜你想实现的是将命令的第一个参数变成宏:这可以使用\csnames
\endcsname
tex 原语来完成,正如 cfr 已经提到的那样
\documentclass{article}
\newcommand{\myitemize}[2]{
\begin{description}
\item[$\csname #1\endcsname$]{#2}
\end{description}
}
\begin{document}
\myitemize{bullet}{matinking}
\end{document}
答案2
卢卡德解释了这个问题。要完成你想做的事情,你需要使用类似\csname... \endcsname
下面的方法:
\documentclass{article}
\newcommand{\myitemize}[2]{%
\begin{description}
\item[$\csname #1\endcsname$]{#2}
\end{description}%
}
\begin{document}
\myitemize{bullet}{matinking}
\end{document}