许多罗马字体和无衬线字体,尤其是默认的 LaTeX 字体,似乎都对方括号有特殊要求:它们会比基线低很长一段距离,可能是为了“捕捉”下降线。然而,在很多情况下,这看起来真的很奇怪(至少对我来说),尤其是在排版 X[10] 之类的东西时:
对于该用例,当方括号垂直居中在大写字母的中点周围时,我个人认为它看起来好多了。除了字体之外,tt
它之前看起来已经很好,但因为更改而被破坏了。我可以接受现在看起来有点不合适的事实g
,在之前的版本中也是如此tt
。
现在我问这个问题更多的是出于好奇而不是需要:有没有一种基于文档的方法(即除了调整字体文件之外)可以将当前范围(或整个文档)中的所有方括号向上移动一定量(理想情况下取决于当前字体系列和大小)?以我有限的理解,这样的事情可能需要大量的黑魔法 TeX 黑客技术,在此过程中会破坏很多东西……或者可能不会。也许这里的一位聪明的 TeX 巫师知道答案。
\documentclass{article}
\newcommand{\R}[1]{\raisebox{0.075em}{#1}}
\begin{document}
\noindent
rm: \textrm{X[10g]}\\
sf: \textsf{X[10g]}\\
tt: \texttt{X[10g]}\\
math: $X[10g]$\\
\noindent
rm: \textrm{X\R[10g\R]}\\
sf: \textsf{X\R[10g\R]}\\
tt: \texttt{X\R[10g\R]}\\
math: $X\R[10g\R]$\\
\end{document}
答案1
正如 David 在 OP 的评论中指出的那样,激活括号会破坏许多东西的使用,例如可选参数。因此,此解决方案折中了两者的区别。它创建宏,\shftON
并\shftOFF
通过激活或不激活来打开或关闭垂直移位括号\active
。
\shftON
调用时,您可以使用[
和]
字符获得所需的括号……\shftOFF
调用时,一切都会恢复正常。在我的 MWE 中,我首先通过演示\shftON
括号的外观来展示这一点,然后在转动后\shftOFF
,我不仅展示了正在使用的原始括号,还利用了可选的括号参数来表明它们没有被这种技术破坏。
\documentclass{article}
\usepackage{graphicx}% ONLY NEEDED FOR \scalebox DEMO
\setbox0=\hbox{0}
\newlength\htz\newlength\dpz
\htz=\ht0\relax
\dpz=\dp0\relax
\let\svlb[
\let\svrb]
\def\shftlb{\setbox0=\hbox{\svlb}\raisebox{%
\dimexpr-.5\ht0+.5\htz+.5\dp0-.5\dpz}{\svlb}}
\def\shftrb{\setbox0=\hbox{\svrb}\raisebox{%
\dimexpr-.5\ht0+.5\htz+.5\dp0-.5\dpz}{\svrb}}
\catcode`[=\active
\catcode`]=\active
\def\shftON{%
\catcode`[=\active
\catcode`]=\active
\def[{\shftlb}%
\def]{\shftrb}%
}
\catcode`[=12
\catcode`]=12
\def\shftOFF{%
\catcode`[=12
\catcode`]=12
}
\begin{document}
\shftON
$X [10] g$\par\textsf{X [10] g}\par\texttt{X [10] g}\par\textrm{X [10] g}
\shftOFF
Revert: \textrm{X [10] g} \scalebox{.35}[.75]{Optional Argument used}
\end{document}