如何在下划线内提高下划线?

如何在下划线内提高下划线?

我正在重新创建 Thorne 和 Blandford 所著的《现代古典物理学》第 1 章中的一些数学符号。我有一个命令\slot,可以创建一个空白的、带下划线的“槽”,并且该槽本身可以包含由该\smallslot命令绘制的一个附加“槽”。我需要的问题是将内槽略微抬高到外槽上方。目前,正如您在下面看到的,这两个“槽”重叠。我认为问题是当在它\smallslot内部使用时\slot也会被\smashed,这会删除所有垂直空间,但由于 的存在,这对我来说并不完全合理\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}

原始编译的 MWE 结果

编辑:根据 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{}比白色背景上的白色文本更合适,后者只是为了通过实验表明并非所有空间都是空的。

致谢:关于lrboxes:一件事引出另一件事——关于quotchap使用 quotechap 包将引文和章节标题放在单独的页面上) 导致查看该.sty文件。

相关内容