如何在新命令中使用 `\begin` 和 `\end`

如何在新命令中使用 `\begin` 和 `\end`

我正在尝试定义一个新命令来定制 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 \endcsnametex 原语来完成,正如 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}

使用命令名称

相关内容