为定义的变量添加重音符号、下标和上标

为定义的变量添加重音符号、下标和上标

我经常用它\newcommand来定义变量、符号或变量操作。

有时我必须向定义的变量添加重音符号、下标和/或上标,如以下测试示例所示:

\documentclass{article}
\usepackage{fixmath}
\usepackage{ushort}
\usepackage{bm}
\DeclareSymbolFont{bmaccents}{OT1}{cmr}{m}{n}
\DeclareMathAccent{\check}{\mathord}{bmaccents}{"14}

\newcommand{\tns}[1]{\ushort{\bm{#1}}}          % Notation for variable
\newcommand{\var}{\tns{\Omega}_L^\mathrm{K}}    % Variable
\newcommand{\proj}[1]{\check{#1}}               % Accent on variable
\newcommand{\drv}[2]{#1_{,#2}}                  % Derivative of variable
\newcommand{\ind}[2]{^{[#1]}_\mathrm{#2}}       % Indices for variable

\renewcommand{\arraystretch}{1.5}
\begin{document}
\noindent
\begin{tabular}{@{} l l l l l @{}}
& Desired code & Actual result & Desired result & Comment\\
%
Variable & \verb|\var|&
$\var$ &
$\ushort{\bm{\Omega}}_{L}^{\mathrm{K}}$ &
ok\\
%
Add subscript & \verb|\var_l| &
$\var_l$ &
$\ushort{\bm{\Omega}}_{Ll}^{\mathrm{K}}$ &
not ok, error\\
%
Add superscript & \verb|\var_l^k|&
$\var_l^k$ &
$\ushort{\bm{\Omega}}_{Ll}^{\mathrm{K}k}$ &
not ok, error\\
%
\ldots\\
%
All together & $^\star$ & 
$\drv{\proj{\var_l^k\ind{b}{h}_1^2}}{\xi}$ &
$\ushort{\bm{\proj{\Omega}}}_{Ll\mathrm{h}1,\xi}^{\mathrm{K}k[b]2}$ &
not ok, error\\
\end{tabular}
\bigskip\\
$^\star$: \verb|\drv{\proj{\var_l^k\ind{b}{h}_1^2}}{\xi}|
\end{document}

在此处输入图片描述

\var首先,我使用带有符号 的定义变量\tns。然后我添加任意下标_l。这样做会产生错误的结果和Double subscript.错误。向定义的变量添加任意重音符号、下标和上标也会出现同样的问题。请注意,这只是一个例子。重音符号、下标和上标的顺序和数量并不固定。

那么是否有可能(包)使用我定义的命令来获得所需的结果,即仅在变量本身上添加重音并以稳健的方式合并所有下标和上标Double subscript.而没有错误?Double superscript.

我首先尝试的是使用\DeclareDocumentCommand我首先尝试的解析包并指定不同的参数。但这不太灵活。

我还发现以下两个问题:

其中的答案仅解决我的问题的一部分。

非常感谢您的帮助。

答案1

也许我在这里错过了重点,但在我看来,期望的输出(子标和上标集体向左混合)特别难以在心理上消化,因为我期望垂直对齐的相关事物并没有垂直对齐。

因此,我将冒昧地提出一种略有不同的方法。我的目标是和的下标和上标\drv\ind对齐,_l^k变量后面的内容也应对齐。

如果最终这不是我想要的,我将删除答案,但我会将其提出来供大家考虑。

我没有使用 LaTeX 的标准上标机制来设置这些内容,而是将一系列\stackanchors 串在一起。因此,需要进行两项语法更改:

  1. 诸如_l^k被替换为\foo{k}{l};和

  2. 如果所需的参数\proj不是希腊字母,而是\tns希腊字母,则使用\projX而不是\proj

因此,建议的语法变为:

$\drv{\projX{\var\foo{k}{l}\ind{b}{h}\foo{2}{1}}}{\xi}$

这是 MWE。如您所见,所有子项和超项都位于各自的基线上,而反向克拉位于加粗的 Omega 之上。与 OP 所说的期望值的区别在于组的对齐方式:K/L、k/l、[b]/h 和 2/1。

\documentclass{article}
\usepackage{fixmath}
\usepackage{ushort}
\usepackage{bm}
\DeclareSymbolFont{bmaccents}{OT1}{cmr}{m}{n}
\DeclareMathAccent{\check}{\mathord}{bmaccents}{"14}
\newcommand{\tns}[1]{\ushort{\bm{#1}}}          % Notation for variable
\newcommand{\proj}[1]{\check{#1}}               % Accent on variable

\usepackage{stackengine}
\stackMath
\def\stacktype{L}
% \tns UNCHANGED
\newcommand\var{\tns\Omega%
  \stackanchor[.6\baselineskip]{\scriptstyle\mathrm{K}}{\scriptstyle L}}
% \proj UNCHANGED, BUT \projX ADDED
\newcommand{\projX}[1]{\expandafter\projhelpA#1}%
\newcommand{\projhelpA}[2]{#1{\check#2}}%
\newcommand\drv[2]{#1\stackanchor[.6\baselineskip]{}{\scriptstyle,#2}}
\newcommand\ind[2]{%
  \stackanchor[.6\baselineskip]{\scriptstyle[#1]}{\scriptstyle\mathrm{#2}}}
\newcommand\foo[2]{\stackanchor[.6\baselineskip]{\scriptstyle#1}{\scriptstyle#2}}
\parskip1em
\begin{document}
$\var$\par
$\var\foo{}{l}$\par
$\var\foo{k}{l}$\par
$\drv{\projX{\var\foo{k}{l}\ind{b}{h}\foo{2}{1}}}{\xi}$
\end{document}

在此处输入图片描述

答案2

我不确定我是否完全理解了你的设置。对我来说,你似乎对第二个表达式没有意见,

$\ushort{\bm{\proj{\Omega}}}_{Ll\mathrm{h}1,\xi}^{\mathrm{K}k[b]2}$

只是它不能在 和 等指令的“移动”参数中\section使用\caption

为了解决这种情况,我建议您(a)加载etoolbox包并(b)发出指令\robustify{\ushort}

\documentclass{article}
\usepackage{fixmath,ushort,bm}

\usepackage{etoolbox} % for "\robustify" macro
\robustify{\ushort}

\DeclareSymbolFont{bmaccents}{OT1}{cmr}{m}{n}
\DeclareMathAccent{\check}{\mathord}{bmaccents}{"14}
\newcommand{\tns}[1]{\ushort{\bm{#1}}} % Notation for variable
\newcommand{\var}{\tns{\Omega}_L^\mathrm{K}}  % Variable
\newcommand{\proj}[1]{\check{#1}} % Accent on variable
\newcommand{\drv}[2]{#1_{,#2}}    % Derivative of variable
\newcommand{\ind}[2]{^{[#1]#2}}   % Indices for variable

\begin{document}

\noindent
$\ushort{\bm{\proj{\Omega}}}_{Ll\mathrm{h}1,\xi}^{\mathrm{K}k[b]2}$

\section{$\ushort{\proj{\bm{\Omega}}}_{Ll\mathrm{h}1,\xi}^{\mathrm{K}k[b]2}$}

\begin{figure}[h!]
\caption{$\ushort{\proj{\bm{\Omega}}}_{Ll\mathrm{h}1,\xi}^{\mathrm{K}k[b]2}$}
\end{figure}

\end{document}

相关内容