使用支架包来弥补ket和bra之间的差距

使用支架包来弥补ket和bra之间的差距

我使用 brackett 包来使用 brackett 符号。它工作正常,但我使用该包编写张量积时遇到了一些问题。

笔者认为,内衣和胸罩之间总是存在很大差距\ket{x}\bra{x}。所以我想让它像|x><x|,又不像|x> <x|。有谁知道这个问题,也许还有解决办法?

例子:

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{braket}
\begin{document}
\begin{align*}
\ket{x}\bra{x}
\end{align*}
\end{document}

答案1

\bra这是“设计使然”。和的定义\ket

% braket.sty, line 31:
\def\bra#1{\mathinner{\langle{#1}|}}

% braket.sty, line 32:
\def\ket#1{\mathinner{|{#1}\rangle}}

\mathinner在建筑物的两侧增加了一个狭窄的空间。

如果你想删除这些额外的细小空间(顺便说一句,这不是一个坏主意),你可以重新定义它们,例如

\renewcommand\bra[1]{{\langle{#1}|}}
\renewcommand\ket[1]{{|{#1}\rangle}}

\langle然而,和的侧边距\rangle仍然会留下一个洞。

\documentclass[10pt,a4paper]{article}

\usepackage{braket}

\renewcommand\bra[1]{{\langle{#1}|}}
\renewcommand\ket[1]{{|{#1}\rangle}}

\begin{document}

\[
\ket{x}\bra{x}
\]

\[
\ket{x}\!\bra{x}
\]

\end{document}

在此处输入图片描述

您可以检查 a 是否\bra紧跟 a \ket

\documentclass[10pt,a4paper]{article}

\usepackage{braket}

\renewcommand\bra[1]{{\langle{#1}|}}
\makeatletter
\renewcommand\ket[1]{%
  \@ifnextchar\bra{\k@t{#1}\!}{\k@t{#1}}%
}
\newcommand\k@t[1]{{|{#1}\rangle}}
\makeatother

\begin{document}

\[
\ket{x}\bra{x}
\]

\end{document}

在此处输入图片描述

答案2

扩展egreg 的回答,如果你想在移动参数中使用无空格版本的命令,比如标题中的参数,你应该让它们变得健壮。所以

\documentclass{article}
\usepackage{graphicx}

\usepackage{braket}
\makeatletter
\DeclareRobustCommand\ket[1]{%
  \@ifnextchar\bra{\k@t{#1}\!}{\k@t{#1}}%
}
\newcommand\k@t[1]{{|{#1}\rangle}}
\makeatother

\begin{document}
\begin{figure}[t]
  \centering\includegraphics[width=\textwidth]{example-image-a}
  \caption{My cool caption $\ket{a}\bra{b}$.\label{fig:a}}
\end{figure}

\end{document}

在此处输入图片描述

相关内容