我在为 latex 定义新命令时遇到了麻烦。我想做什么?定义一个 \newcommand 来定义映射,如下所示:
\documentclass[english]{scrreprt}
\usepackage{amsmath}
\usepackage{amssymb}
\begin{document}
f : \begin{align*}
& \mathbb{N} \to \mathbb{R} \\
& x \mapsto f(x)
\end{align*}}
\end{document}
我的问题是,我尝试使用对齐环境(因为它不需要数学模式),如下所示:
\newcommand{\appli}[5]{%
{#1}\colon \begin{align*}%
& {#2} \longrightarrow {#3}\\%
& {#4} \longmapsto {#5}%
\end{align*}}
然后尝试编译写入:\appli{f,\mathb{R},\mathbb{R},x,f(x)},但它不起作用。
接下来我尝试使用数组环境,如下所示:
\newcommand{\appli}[5]{%
{#1}\colon \begin{array}{rcl}%
& {#2} \longrightarrow {#3}\\%
& {#4} \longmapsto {#5}%
\end{array}}
并编译写入:$\appli{f,\mathbb{R},\mathbb{R},x,f(x)}$。仍然不起作用。我也尝试过不写 \mathbb{} 只写 R 来看看它是否有效,但仍然不起作用。
我得到的是一堆错误,说我漏掉了 } 或 $,或者我在编译时没有处于数学模式。坦率地说,我不是专家,我不明白很多错误,但我想轻松地定义映射。
非常感谢您的帮助。
答案1
使用\NewDocumentCommand
from xparse
,它可以工作:
\documentclass{article}
\usepackage{xparse}
\usepackage{amsmath, amsfonts}
\NewDocumentCommand{\appli}{mmmmm}{%
\[ {#1}\colon \begin{aligned}[t]%
{#2} & \longrightarrow {#3}\\%
{#4} & \longmapsto {#5}%
\end{aligned} \]}
\begin{document}
\appli{f}{\mathbb{N}}{\mathbb{R}}{x}{f(x)}
\end{document}
答案2
非常感谢 Ulrike Fischer 和 Bernard 的回答!
我所写内容的主要问题是,正如 Ulrike 指出的那样,“TeX 中的参数用括号括起来,而不是逗号列表”,这意味着当我编写时,\appli{f,\mathb{R},\mathbb{R},x,f(x)}
编译无法工作。解决方案是改为编写\appli{f}{\mathb{R}}{\mathbb{R}}{x}{f(x)}
!
尽管如此,我仍然对对齐环境感到兴奋,因为我想定义一个仍然可以写在句子中间的命令,并且定义一个在行高处带有地图名称的地图,所以我尝试保留数组环境,我得到的是:
\newcommand{\appli}[5]{%
${#1}$:$\begin{array}{rcl}%
{#2} & \longrightarrow & {#3}\\%
{#4} & \longmapsto & {#5}%
\end{array}$%
}
\appli{u}{\mathbb{N}}{\mathbb{R}}{n}{u(n)}\newline
通过这种方式写作\newcommand
我得到了我想要的:)