Поэтому я хочу обозначить оператор Дирака шляпой, и я попробовал оба варианта \hat{\slashed{D}}
и \slashed{\hat{D}}
: в первом случае $^$ находится довольно далеко от $\slashed{D}$, а во втором — косая черта находится намного левее $D$, почти совпадая с полувертикальной чертой буквы $D$.
Есть ли способ отрегулировать положение шляпы или косой черты?
решение1
Просто наложите поверх символа шляпу его перечеркнутую версию.
\documentclass{standalone}
\usepackage{mathtools,slashed}
\newcommand\hatslashed[1]{{\hat{#1}\mathllap{\slashed{#1}}}}
\begin{document}
$\hat{\slashed{D}}$
$\slashed{\hat{D}}$
$\hatslashed{D}_{\hatslashed{D}_{\hatslashed{D}}}$
\end{document}
Вы можете использовать \phantom
следующий способ, чтобы предотвратить двойное нажатие на глиф, но, насколько мне известно, \phantom
он не распознает сжатый стиль и смещает шляпу вправо.
\newcommand\hatslashed[1]{{\hat{\phantom{#1}}\mathllap{\slashed{#1}}}}
решение2
Без перекрытия символов:
\documentclass[border=3,varwidth]{standalone}
\usepackage{mathtools,slashed}
\makeatletter
\def\pslashed#1{%
\expandafter\ifx\csname psla@\string#1\endcsname\relax
{\mathpalette{\sla@/00}{\phantom{#1}}}%
\else
\csname psla@\string#1\endcsname
\fi}
\def\declarepslashed#1#2#3#4#5{%
\expandafter\def\csname psla@\string#5\endcsname{%
#1{\mathpalette{\sla@{#2}{#3}{#4}}{\phantom{#5}}}}}
\makeatother
\declarepslashed{}{/}{.08}{0}{D}
\newcommand\hatslashed[1]{\mathrlap{\hat{#1}}\slashed{#1}}
\begin{document}
$\hat{D}$
$\slashed{D}$
$\hatslashed{D}_{\hatslashed{D}_{\hatslashed{D}}}$
\end{document}
Я определяю команду \pslashed
, которая имитирует \slashed
, но над фантомом.
Почему не дает \hat{\phantom{D}}
хорошего результата? Потому что \hat
не может получить метрическую информацию шрифта о символе D, потому что он находится над пустым полем. Поэтому мы устанавливаем акцентированный символ (в \mathrlap
), а затем устанавливаем косую черту, как если бы она была над D.
решение3
Это оказалось гораздо интереснее, чем я ожидал, как упражнение. В первой строке моего ответа я даю основные элементы, с которыми мы работаем, D, D в шляпе и D с косой чертой.
Затем, во второй строке, я подтверждаю наблюдения OP, что создание составных глифов \hat{\slashed{D}}
и \slashed{\hat D}
вызывает искажения в результате. Это не слишком удивительно, я полагаю.
Поэтому я решил, что это было сделано специально для стека, в котором я мог бы наложить два базовых элемента друг на друга, чтобы достичь результата. Сначала я убедился, что все базовые элементы были одинаковой ширины, не увеличенной сбоку каким-либо образом декором. Конечно, я хотел избежать, если это возможно, двойного удара по букве D
, поэтому я использовал a \phantom
в D
одном из двух элементов стека. И я обнаружил, к своему удивлению, что фантом также искажал результаты.
Примерно в это же время Анри опубликовал свое решение, намного превосходящее мой собственный подход, поскольку оно естественным образом масштабируется с mathstyle (тогда как мне пришлось бы добавить аппарат поверх scalerel
моего решения, чтобы достичь этого). Я отказался от своего решения, проголосовал за Анри и оставил ему комментарий о своих \phantom
наблюдениях. Но затем он попросил результат stackengine, поэтому я продолжаю.
Третья строка моего результата показывает эти фантомные результаты, с шляпой, смещенной влево в первой строке, и штрихом, смещенным влево во второй. Я подумал, что это может быть как-то связано с кернами, специфичными для букв, потерянными вместе с фантомом.
Итак, на четвертой строке я просто жил с двойным ударом D
, как и Анри. Но этот подход в его нынешнем виде не масштабируется с математическим стилем.
\documentclass{article}
\usepackage{slashed}
\usepackage{stackengine}
\def\stackslashA#1#2{\def\stacktype{L}\stackon[0pt]{$#1{\phantom{#2}}$}{$\slashed{#2}$}}
\def\stackslashB#1#2{\def\stacktype{L}\stackon[0pt]{$#1{#2}$}{$\slashed{\phantom{#2}}$}}
\def\stackslash#1#2{\def\stacktype{L}\stackon[0pt]{$#1{#2}$}{$\slashed{#2}$}}
\begin{document}
Basic Elements: $D \hat D \slashed D $
Derived Elements:$\hat{\slashed{D}} \slashed{\hat D}$ (ugh!)
Stacked Phantoms: $\stackslashA{\hat}{D} \stackslashB{\hat}{D}$ (slight shifts)
Stacked Element: $\stackslash{\hat}{D}$ (double-stroked D)
\end{document}