如何在不使用 MnSymbol 包的情况下获得双尖括号?

如何在不使用 MnSymbol 包的情况下获得双尖括号?

我尝试\llangle\rrangleMnSymbol包,这样就没问题了。但是这个包还改变了其他我不想要的东西。

答案1

以下解决方案从包中提取\llangle和的代码。为避免名称冲突,将其重命名为。使用字体,和正在使用和,因为和基于字体级别功能。\rrangleMnSymbollargesymbolsMnLargeSymbolsMnSymbol\left\right\llangle\rrangle\left\right

\documentclass{article}

\makeatletter
\DeclareFontFamily{OMX}{MnSymbolE}{}
\DeclareSymbolFont{MnLargeSymbols}{OMX}{MnSymbolE}{m}{n}
\SetSymbolFont{MnLargeSymbols}{bold}{OMX}{MnSymbolE}{b}{n}
\DeclareFontShape{OMX}{MnSymbolE}{m}{n}{
    <-6>  MnSymbolE5
   <6-7>  MnSymbolE6
   <7-8>  MnSymbolE7
   <8-9>  MnSymbolE8
   <9-10> MnSymbolE9
  <10-12> MnSymbolE10
  <12->   MnSymbolE12
}{}
\DeclareFontShape{OMX}{MnSymbolE}{b}{n}{
    <-6>  MnSymbolE-Bold5
   <6-7>  MnSymbolE-Bold6
   <7-8>  MnSymbolE-Bold7
   <8-9>  MnSymbolE-Bold8
   <9-10> MnSymbolE-Bold9
  <10-12> MnSymbolE-Bold10
  <12->   MnSymbolE-Bold12
}{}

\let\llangle\@undefined
\let\rrangle\@undefined
\DeclareMathDelimiter{\llangle}{\mathopen}%
                     {MnLargeSymbols}{'164}{MnLargeSymbols}{'164}
\DeclareMathDelimiter{\rrangle}{\mathclose}%
                     {MnLargeSymbols}{'171}{MnLargeSymbols}{'171}
\makeatother

\begin{document}
\[ \llangle x,y\rrangle \]
\[ \left\llangle \int_{0}^{\infty} \frac{\mathrm{d}x}{2} \right\rrangle \]
\end{document}

结果

答案2

您可以通过取两个普通括号并将它们适当地放在一起来构建合适的符号。我猜你的主要问题是构建可以在更大尺寸下使用的符号。以下是部分解决方案:

\documentclass{article}

\makeatletter
\newsavebox{\@brx}
\newcommand{\llangle}[1][]{\savebox{\@brx}{\(\m@th{#1\langle}\)}%
  \mathopen{\copy\@brx\kern-0.5\wd\@brx\usebox{\@brx}}}
\newcommand{\rrangle}[1][]{\savebox{\@brx}{\(\m@th{#1\rangle}\)}%
  \mathclose{\copy\@brx\kern-0.5\wd\@brx\usebox{\@brx}}}
\makeatother

\begin{document}

\( \llangle x \rrangle \)

\begin{displaymath}
  \llangle[\Bigg]{\int_X \nu^2}\rrangle[\Bigg]
\end{displaymath}
\end{document}

示例输出

由于构建的符号不是 LaTeX 的真正数学分隔符,因此您无法以通常的方式使用命令\left/\right\big等。因此,我构建了以大小运算符\big, \Big, \bigg,... 作为参数的命令。

它的工作原理是制作一个带有分隔符副本的框(该\m@th命令确保在此过程中取消任何数学环绕),打印该框的副本(通过\copy),将0.5其宽度乘以 ,然后再次打印该框(最后一次通过\usebox也丢弃其内容)。您可能需要调整因子0.5

间距的另一种选择是使用固定间距,并通过定界符的宽度进行少量调整,如下所示:

\documentclass{article}

\makeatletter
\newsavebox{\@brx}
\newcommand{\llangle}[1][]{\savebox{\@brx}{\(\m@th{#1\langle}\)}%
  \mathopen{\copy\@brx\mkern2mu\kern-0.9\wd\@brx\usebox{\@brx}}}
\newcommand{\rrangle}[1][]{\savebox{\@brx}{\(\m@th{#1\rangle}\)}%
  \mathclose{\copy\@brx\mkern2mu\kern-0.9\wd\@brx\usebox{\@brx}}}
\makeatother

\begin{document}

\( \llangle x \rrangle^{\llangle y \rrangle} \)

\begin{displaymath}
  \llangle[\Bigg] \llangle[\bigg] \llangle[\Big] \llangle[\big] A
  \rrangle[\big] \rrangle[\Big] \rrangle[\bigg] \rrangle[\Bigg]
\end{displaymath}
\end{document}

示例输出

\big将大小等作为参数的想法mathtools与包对成对分隔符的处理非常相似。代码可能可以调整以构建也尊重\left/\right...的命令

答案3

我对 MmSymbol 的答案不满意,因为字形与单个\rangle和不同\langle,所以这对于一致性来说不是很好,而我非常需要这两者。

无论如何,这是一个基于@andrew-swann 答案的版本,但具有自动缩放功能。不幸的是,我无法自己创建\llangle或的版本\rrangle,因此它仅限于成对的分隔符。

\documentclass{article}
\usepackage{mathtools}

\makeatletter
\newsavebox{\@bra}
\newsavebox{\@brb}
\DeclarePairedDelimiterX\myinnerp[1]{.}{.}{%
  \delimsize\langle%
  \hspace*{0.3mm}\hspace*{0.55mm}\savebox{\@bra}{\(\displaystyle\left\langle\vphantom{#1}\right.\)}\hspace*{-1.035\wd\@bra}%
  \delimsize\langle%
  #1% 
  \delimsize\rangle%
  \hspace*{0.3mm}\hspace*{0.55mm}\savebox{\@brb}{\(\displaystyle\left.\vphantom{#1}\right\rangle\)}\hspace*{-1.035\wd\@brb}%
  \delimsize\rangle
}
\makeatother


\begin{document}
\[
  \myinnerp*{\dfrac{A}{B}} \myinnerp*{\dfrac{a}{b}} \myinnerp*{A^2} \myinnerp*{a}
\]
\end{document}

结果

再次强调,间距是可调的。值-1.0350.55mm似乎经验上对应于叠加两个括号(不要问我为什么),所以这是一个具有恒定0.3mm距离的版本。

相关内容