
В настоящее время я представляю тензор второго и четвертого порядка с помощью этого (взято у кого-то, и я не совсем понимаю, как это работает):
% tensor 2:
\newcommand{\tend}[1]{\oalign{\mbox{\boldmath$#1$}\crcr\hidewidth$\scriptscriptstyle\sim$\hidewidth}}
%tensor 4:
\newcommand{\tenq}[1]{\tend{\tend #1}\vphantom{#1}}
Выглядит это примерно так:
Мне очень не нравится результат: жирный шрифт странный, с масштабами плохо, слишком много пробелов для тензора четвертого порядка... Я нашел пакет untertilde, который выглядит более надежным для второго порядка, но я не вижу, как сделать из него 4-й порядок. Я также нашел эту тему,жирный широкийтильда, которые не решают проблему укладки символов для 4-го порядка.
Есть ли простой элегантный способ сделать это? Моя главная забота здесь - это единообразное жирное начертание для тильды и буквы, а также правильный вертикальный интервал 4-го порядка.
Спасибо
решение1
Здесь я использую стеки для рекурсивного размещения \sim
под аргументом, основываясь на значении необязательного аргумента. В определении — [1pt]
это зазор под аргументом, а [0pt]
— это вертикальное разделение между \sim
символами в мультистеке. Эти значения можно изменять по своему усмотрению (в том числе делать отрицательными).
Я не использовал жирный шрифт для самого тензора, хотя при желании его можно добавить в определение или во время вызова.
Спецификация \def\useanchorwidth{T}
говорит игнорировать ширину нижнего \sim
набора при установке горизонтального интервала. Единственный случай, когда это может быть проблемой, это если вы, например, использовали смежные вызовы для узких аргументов, например, \tenq[2]{i}\tenq[3]{j}
. Хотя \useanchorwidth
строку можно было бы удалить, и в этом случае \tenq
с узкими аргументами она всегда будет занимать как минимум ширину a \scriptscriptstyle\sim
, моим первым шагом вместо этого было бы вручную добавлять \,
пространство в тех очень редких случаях, когда это необходимо.
\documentclass{article}
\usepackage{stackengine}
\stackMath
\newcommand\tenq[2][1]{%
\def\useanchorwidth{T}%
\ifnum#1>1%
\stackunder[0pt]{\tenq[\numexpr#1-1\relax]{#2}}{\scriptscriptstyle\sim}%
\else%
\stackunder[1pt]{#2}{\scriptscriptstyle\sim}%
\fi%
}
\begin{document}
\[
\tenq{\sigma}\neq\tenq[2]{\Lambda}\neq\tenq[3]{\Delta}\neq\tenq[4]{\psi}
\]
\end{document}
решение2
Если вам нравится первый вариант, вы можете использовать то же определение, \tenq
но \approx
вместо \sim
.
Также используйте \bm
из того же пакета вместо \boldmath
.
МВЭ:
\documentclass{article}
\usepackage{amsmath,bm}
% tensor 2:
\newcommand{\tend}[1]{\hbox{\oalign{$\bm{#1}$\crcr\hidewidth$\scriptscriptstyle\bm{\sim}$\hidewidth}}}
%tensor 4:
\newcommand{\tenq}[1]{\hbox{\oalign{$\bm{#1}$\crcr\hidewidth$\scriptscriptstyle\bm{\approx}$\hidewidth}}}
\begin{document}
\[
\tend{\sigma}\neq\tenq{\Lambda}
\]
\end{document}
решение3
Просто ради развлечения.
\documentclass{standalone}
\usepackage{amsmath,bm}
\newlength{\fillwidth}
% creates a tilde which slightly overlaps what's above and below, centered in a space \fillwidth wide
\newcommand{\flatsim}{\hbox to \fillwidth{\hfil\raisebox{0pt}[.05ex][.05ex]{$\scriptscriptstyle\bm{\sim}$}\hfil}}
\newcommand{\triple}[1]{\settowidth{\fillwidth}{$\bm{#1}$}%
\vtop{\baselineskip=0pt\hbox{$\bm{#1}$}\hbox{\rule{0pt}{.2ex}}\flatsim\flatsim\flatsim}}
\begin{document}
\triple{\sigma}
\end{document}