如果我有这个 MWE:
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz-cd,tikz}
\usetikzlibrary{decorations.pathmorphing}
\DeclareRobustCommand{\twoheads}{\mathbin{\begin{tikzcd}[column sep=1.2em]{\mkern-10mu}\arrow[r,two heads,squiggly]&{\mkern-10mu}\end{tikzcd}}}
\begin{document}
$A\twoheads B$, $a {\scriptstyle \twoheads} v$, $l {\scriptscriptstyle \twoheads} g$
\end{document}
并且我想\twoheads
使用\mathbin
、或\mathrel
或其他命令(\mathclap
等)创建一个名为的新符号,为什么会出现这个错误?
未定义控制序列。[$A\twoheads]
我忘记了什么?最佳解决方案是什么?
跟进或编辑:查看非常好的用户@campa 的链接,我尝试使用出色用户@David Carlisle 的答案\newcommand 和 tikzcd
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz-cd,tikz}
\usetikzlibrary{decorations.pathmorphing}
\newcommand{\dotheobvious}[1]{#1}
\dotheobvious{\[\mathbin{\begin{tikzcd}[column sep=1.2em,ampersand replacement=\&]{\mkern-10mu}\arrow[r,two heads,squiggly]&{\mkern-10mu}\end{tikzcd}}\]}
\begin{document}
$A\dotheobvious{B}$
\end{document}
1.我不明白为什么要这么做[1]{#1}
;
2.我明白了ampersand replacement=\&;
3.如果我已经放了\DeclareMathCommand
为什么\DeclareRobustCommand
我必须添加\[...\]
考虑tikz-cd
,特别是在文本模式和数学模式下工作?
4.最后的密码不起作用。
追加:2021/07/13:我按照@egreg的建议做了,但还是没有找到正确的解决方案。这是带有错误的MWE:
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz-cd,tikz}
\usetikzlibrary{decorations.pathmorphing}
\newcommand{\squee}[1]{#1}
\squee{\mathbin{\begin{tikzcd}[column sep=1.2em,ampersand replacement=\&]{\mkern-10mu}\arrow[r,two heads,squiggly]\&{\mkern-10mu}\end{tikzcd}}}
\begin{document}
$A\squee B$
\end{document}
答案1
我不太确定在经过大量编辑后如何回答,所以我尝试一步一步地进行......为了简洁起见,我假设以下所有代码片段都以代码开头
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{tikz-cd,tikz}
\usetikzlibrary{decorations.pathmorphing}
最初的问题
\DeclareRobustCommand{\twoheads}{%
\mathbin{%
\begin{tikzcd}[column sep=1.2em]
{\mkern-10mu}\arrow[r,two heads,squiggly]&{\mkern-10mu}
\end{tikzcd}%
}%
}
\begin{document}
$A\twoheads B$
\end{document}
失败,原因解释如下\newcommand 和 tikzcd:tikzcd
更改 catcodes,如果将代码放入宏中,则它将不起作用,因为 catcodes 已被冻结。
然后你尝试 David 的代码并写入
\newcommand{\dotheobvious}[1]{#1}
\dotheobvious{\[\mathbin{\begin{tikzcd}[column sep=1.2em,ampersand replacement=\&]{\mkern-10mu}\arrow[r,two heads,squiggly]&{\mkern-10mu}\end{tikzcd}}\]}
\begin{document}
$A\dotheobvious{B}$
\end{document}
但我认为你误解了他的观点:宏\dotheobvious
只是使用它的参数,但 David 的观点是使用它并传递tikzcd
as 宏参数会冻结 catcodes,从而导致错误。然而,他把代码里面,而document
您尝试在序言中执行此操作。当然,您会遇到错误,因为您尝试在序言中排版。
和$A\dotheobvious{B}$
完全一样$AB$
。
您的第三段代码也存在同样的问题。您已经删除了 and \[
,\]
但仍试图在序言中进行排版,这将导致错误。
长话短说:你想要
\documentclass[twocolumn]{article}
\usepackage{amsmath}
\usepackage{tikz-cd,tikz}
\usetikzlibrary{decorations.pathmorphing}
\DeclareRobustCommand{\squee}{%
\mathbin{%
\begin{tikzcd}[column sep=1.2em,ampersand replacement=\&]
{\mkern-10mu}\arrow[r,two heads,squiggly]\&{\mkern-10mu}
\end{tikzcd}%
}%
}
\begin{document}
Inline math $A\squee B$, or
\begin{align*}
A \squee B
\end{align*}
in display math.
\end{document}