我正在重新创建 Thorne 和 Blandford 所著的《现代古典物理学》第 1 章中的一些数学符号。我有一个命令\slot
,可以创建一个空白的、带下划线的“槽”,并且该槽本身可以包含由该\smallslot
命令绘制的一个附加“槽”。我需要的问题是将内槽略微抬高到外槽上方。目前,正如您在下面看到的,这两个“槽”重叠。我认为问题是当在它\smallslot
内部使用时\slot
也会被\smash
ed,这会删除所有垂直空间,但由于 的存在,这对我来说并不完全合理\mbox
。我怎样才能稍微提高内“槽”的高度?永远不会有超过一个内“槽”和一个外“槽”。
这是我的原始 MWE 及其输出。
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\slot}{ s O{~} }{%
\IfBooleanTF {#1} % check for *
{% * doesn't print a filled slot.
%\,\smash{\makebox[1.5em]{\ensuremath{#2}}}\,
{\ensuremath{#2}}
}%
{% Print a filled slot by default, a la Thorne and Blandford.
\,\underline{\smash{\makebox[1.5em]{\ensuremath{#2}}}}\,
}%
}%
\newcommand*{\smallslot}{\,\underline{\smash{\makebox[0.04em]{\ensuremath{~}}}}\,}
\begin{document}
\[
\mathbf{a}(\slot) \qquad
%\mathbf{a}(\slot[\mathbf{b}]) \qquad
%\mathbf{a}(\slot[\mathbf{b}(\slot)]) \qquad
\mathbf{a}(\slot[\mathbf{b}(\smallslot)]) \qquad
%\mathbf{a}(\mathbf{b})
\]
\end{document}
编辑:根据 Donald Arseneau 的建议,我删除了它\smash
,这里是生成的 MWE 及其输出。
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\slot}{ s O{} }{%
\IfBooleanTF {#1} % check for *
{% * doesn't print a filled slot.
%\,\smash{\makebox[1.5em]{\ensuremath{#2}}}\,
{\,\makebox[2.0em]{\ensuremath{#2}}\,}
}%
{% Print a filled slot by default, a la Thorne and Blandford.
%\,\underline{\smash{\makebox[1.5em]{\ensuremath{#2}}}}\,
\,\underline{\makebox[2.0em]{\ensuremath{#2}}}\,
}%
}%
%\newcommand*{\smallslot}{\,\underline{\smash{\makebox[0.04em]{\ensuremath{~}}}}\,}
\newcommand*{\smallslot}{\,\underline{\makebox[0.80em]{\ensuremath{}}}\,}
\begin{document}
\[
\mathbf{a}(\slot) \qquad
%\mathbf{a}(\slot[\mathbf{b}]) \qquad
%\mathbf{a}(\slot[\mathbf{b}(\slot)]) \qquad % Without the smaller slot.
\mathbf{a}(\slot[\mathbf{b}(\smallslot)]) \qquad
%\mathbf{a}(\mathbf{b})
\]
\end{document}
我怀疑答案是“否”,但我的新问题是是否有办法让外部插槽的下划线保持相同的高度,而内部插槽的下划线升高。如您所见,现在似乎发生了完全相反的情况。
答案1
手动调整raisebox
可能会有帮助:
(
字形深度(此处为和的底部)
)将下划线向下移动。
第 1 章中的预期输出是什么样的?
使用“虚拟文本”方法,带或不带 (),可得出:
平均能量损失
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\slot}{ s O{} }{%
\IfBooleanTF {#1} % check for *
{% * doesn't print a filled slot.
%\,\smash{\makebox[1.5em]{\ensuremath{#2}}}\,
{\,\makebox[2.0em]{\ensuremath{#2}}\,}
}%
{% Print a filled slot by default, a la Thorne and Blandford.
%\,\underline{\smash{\makebox[1.5em]{\ensuremath{#2}}}}\,
\,\underline{\makebox[2.0em]{\ensuremath{#2}}}\,
}%
}%
\newcommand*{\smallslot}{\,\underline{\makebox[0.80em][1ex]{\ensuremath{x}}}\,}
\begin{document}
\[
\mathbf{a}(\slot) \qquad
\mathbf{a}(\slot[\raisebox{2.1pt}{$\mathbf{b}$(\smallslot)}]) \qquad
\]
\end{document}
MWE变体
\documentclass{article}
\usepackage{xcolor}
\newsavebox{\slotboxname}
\begin{lrbox}{\slotboxname}{\textcolor{white}{(xxx}}\end{lrbox}%
\newsavebox{\slotboxnameb}
\begin{lrbox}{\slotboxnameb}{\textcolor{white}{(xx}}\end{lrbox}%
\newsavebox{\slotboxnamec}
\begin{lrbox}{\slotboxnamec}{\textcolor{white}{xxx}}\end{lrbox}%
\newsavebox{\slotboxnamed}
\begin{lrbox}{\slotboxnamed}{\textcolor{white}{xx}}\end{lrbox}%
\begin{document}
\[
a(\underline{\usebox{\slotboxname}}) = a(\underline{\raisebox{2pt}{b(\underline{\usebox{\slotboxnameb}})}})
\]
\[
a(\underline{\usebox{\slotboxnamec}}) = a(\underline{\raisebox{2pt}{b(\underline{\usebox{\slotboxnamed}})}})
\]
\end{document}
实际上,使用\phantom{}
比白色背景上的白色文本更合适,后者只是为了通过实验表明并非所有空间都是空的。
致谢:关于lrbox
es:一件事引出另一件事——关于quotchap
(使用 quotechap 包将引文和章节标题放在单独的页面上) 导致查看该.sty
文件。