使用 Tikzpicture 创建新的分隔符?

使用 Tikzpicture 创建新的分隔符?

我有兴趣使用我定义的 tikzpictures 创建新的成对分隔符。我一定错过了一些简单的东西,但几个小时的搜索都无济于事。以下是我目前所拥有的:

\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz}

\def\pewl{\hspace{.075cm}
\begin{tikzpicture}[scale=1, baseline=1mm, line width=.23mm]
\draw (0mm,3.25mm) -- (0mm,1mm);
\draw (0mm,3.25mm) arc (180:90:.8mm);
\draw (0mm,1mm) arc (180:270:.8mm);
\end{tikzpicture}
}

\def\pewr{\hspace{-.01cm}
\begin{tikzpicture}[scale=1, baseline=1mm, line width=.23mm]
\draw (0mm,3.25mm) -- (0mm,1mm);
\draw (0mm,3.25mm) arc (0:90:.8mm);
\draw (0mm,1mm) arc (0:-90:.8mm);
\end{tikzpicture}
}
\DeclarePairedDelimiter{\pew}{\pewl}{\pewr}

\begin{document}

$$
\pewl M\pewr \pewl g\pewr \pewl f\pewr 
\pew{M} \pew{g} \pew{\sum}
$$

\end{document}

由此可得:

新的 tikzpicture 分隔符失败。

并出现错误:

缺少分隔符(插入 .)。

我在 Overleaf 上,如果这有某种相关性的话。任何帮助都将不胜感激!

答案1

你似乎想要一个自动缩放的成对分隔符从你制作的 tikz 绘图中。这可以通过

  1. 使括号的高度和深度可调
  2. 通过将内容保存到盒子中来测量内容。
\documentclass{article}
\usepackage{mathtools}
\usepackage{tikz}

\makeatletter
% inserted extra 1mu before and after the symbol, can be adjusted.
% this is in addition to the spacing inserted by mathopen and mathclose
\newcommand\@pewl[2]{\ensuremath{\mathopen{\mkern1mu\relax%
\begin{tikzpicture}[scale=1, baseline=1mm, line width=.23mm]
\draw (0mm,1mm+#1) -- (0mm,1mm-#2);
\draw (0mm,1mm+#1) arc (180:90:.8mm);
\draw (0mm,1mm-#2) arc (180:270:.8mm);
\end{tikzpicture}}
}}

\newcommand\@pewr[2]{\ensuremath{\mathclose{%
\begin{tikzpicture}[scale=1, baseline=1mm, line width=.23mm]
\draw (0mm,1mm+#1) -- (0mm,1mm-#2);
\draw (0mm,1mm+#1) arc (0:90:.8mm);
\draw (0mm,1mm-#2) arc (0:-90:.8mm);
\end{tikzpicture}\mkern1mu\relax}
}}

\newsavebox{\pew@inner}
\newlength\pew@ht
\newlength\pew@dp
\newcommand\pew[1]{%
        \text{\savebox{\pew@inner}{$#1$}%
                \pew@ht=\ht\pew@inner\relax%
                \pew@dp=\dp\pew@inner\relax%
                \ifdim\pew@ht<1.5ex\relax% Set a minimum height of 1.5ex
                        \global\pew@ht=1.5ex\relax
                \fi
        \@pewl{\pew@ht}{\pew@dp}\usebox{\pew@inner}\@pewr{\pew@ht}{\pew@dp}}}
\makeatother

\begin{document}

\[
        \pew{M} \pew{g} \pew{k} \pew{\frac12} \pew{\frac{1}{1 + \frac{1}{1+ \frac12}}}
\]

\end{document}

在此处输入图片描述

答案2

简短的回答是:

不要\DeclarePairedDelimiter与非可扩展分隔符的对象一起使用

您的代码实际上遇到了两种不同类型的问题。

  1. 如果您使用过\pew{M},您应该会看到有关缺少的错误{

    这是一个神秘的错误,是由于 how\DeclarePairedDelimiter处理没有可选参数的无星号版本而导致的。在这种情况下,代码本质上只是扩展为\mathopen\pewl M\mathclose\pewr我不知道为什么会出错,但这是一个\mathopen#1\mathopen{#1}表现不同的情况。这是一个问题,因为\mathopen是一个 TeX 原语,它期望后面的内容扩展为单个字符或一个组。正如你定义的,\pewl两者都不是。

    如果您一开始就将\pewl和适当地声明为 mathopen/close 类型的对象,这个问题就可以“解决” 。例如,您可以将其定义为。无论如何,您都应该这样做。\pewr\pewl\mathopen{\hspace{0.075cm}...}独立于这个答案的其余部分因为如果您正在创建分隔符,则它们应该按照排版分隔符的规则进行排版,而不是普通数学原子的规则。

  2. 如果您使用\pew[\big]{M}\pew*{M},则会看到有关缺少分隔符和插入的错误.

    在某个地方(经过大量扩展之后),TeX 会遇到类似 的东西。但这只有在是可扩展分隔符\left\pewl时才有意义。因为不是这样的(\pewl\pewl可扩展分隔符是字体中定义的特定符号的特性),\left抱怨道。

解决方案:

  1. 如上所述,将\pewl和定义\pewr\mathopen\mathclose原子。
  2. 不要使用\DeclarePairedDelimiter,而只需使用\newcommand来定义\pew

相关内容