我经常用它\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 的标准上标机制来设置这些内容,而是将一系列\stackanchor
s 串在一起。因此,需要进行两项语法更改:
诸如
_l^k
被替换为\foo{k}{l}
;和如果所需的参数
\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}