![新命令定义中的印刷问题](https://linux22.com/image/273497/%E6%96%B0%E5%91%BD%E4%BB%A4%E5%AE%9A%E4%B9%89%E4%B8%AD%E7%9A%84%E5%8D%B0%E5%88%B7%E9%97%AE%E9%A2%98.png)
先生,我对两个新命令有点小问题
我有这个我不喜欢的定义:
\def\DDbar {\ensuremath{\kern -0.1em \stackrel{\kern 0.1em \textsf{\fontsize{5pt}{1em}\selectfont(---)}}{D}\kern -0.3em}\xspace}
你知道如何改进它吗?我需要的是类似的东西
\def\Dbar {\kern 0.2em\overline{\kern -0.2em \PD}{}\xspace}
其中,我想要的不是单个条形图,而是括号内的条形图。
我的第二个问题是
\def\sPlot {\ensuremath{\hbox{$_s$}{\mathcal P}lot}\xspace}
它显示了我想要的,但我到底为什么需要
$_s$
里面的\ensuremath
?是因为什么\hbox
?如果我把删除,$$
命令将无法在正常的文本书写中起作用。
再次感谢您的宝贵帮助。
答案1
这里有一些\parenbar
和\xbar
命令,用于避免条形图覆盖其参数过多。这些命令有一个可选参数,用于调整移动量;例如,如果符号是直立的,则\parenbar[0]{\Phi}
看起来更合适。
\documentclass{article}
\newcommand\DDbar{\parenbar{D}}
\newcommand{\parenbar}[2][4]{%
\mkern#1mu
\sbox0{$#2$}%
\makebox[0pt][r]{\raisebox{\ht0}{$\scriptscriptstyle($}}%
\overline{\mkern-#1mu#2\mkern-1mu}%
\makebox[0pt][l]{\raisebox{\ht0}{$\scriptscriptstyle)$}}%
\mkern1mu
}
\newcommand{\xbar}[2][4]{%
\mkern#1mu
\overline{\mkern-4mu#2\mkern-1mu}%
\mkern1mu
}
\begin{document}
$X\DDbar X\xbar{D} X$
$\parenbar[1]{\Phi}$
$A\xbar{A}A$
\end{document}
对于第二个问题,请参阅 Andrew Swann 的回答:
\newcommand{\sPlot}{%
{}_s\mathcal{P}\mkern-2mu\mathit{lot}%
}
没有\ensuremath
并且\xspace
才是出路。
答案2
这里有几点建议。
对于第一个命令,\stackrel
整个结构垂直居中,这意味着不D
位于基线上。相反,您可以使用包\overset
中的amsmath
命令。您可以使用 LaTeX ,而不是切换到文本模式来显示 emdash \rule
:
\rule[0.3ex]{1em}{0.4pt}
产生一个1em
长规则(类似 emdash),标准线粗细为 ,0.4pt
但升高0.3ex
。将括号表达式放在\smash
语句中可以使其降低一点,更接近D
。
对于第二条命令,您不需要进行任何\hbox
操作,只需{}_s
降低即可s
。我不喜欢单词 plot 的混合字体,但如果您坚持这样做,请将最后一部分写为以\mathit{lot}
获得无数学字距,然后将其移动到更接近P
具有负字距的。
\documentclass{article}
\usepackage{xspace,amsmath}
\newcommand*{\DDbar}{\ensuremath{\overset{\smash[b]{(\rule[0.3ex]{1em}{0.4pt})}}D}\xspace}
\newcommand*{\sPlot}{\ensuremath{{}_s{\mathcal P}\mkern-2mu\mathit{lot}}\xspace}
\begin{document}
Text \DDbar text \sPlot.
\end{document}
顺便说一句,我不喜欢组合\ensuremath...\xspace
,我更喜欢只定义数学模式命令\DDbar
等,然后\( \DDbar \)
在需要时在文本中写入。我还使用了\newcommand*
而不是\def
,正如 egreg 指出的那样:\newcommand
是一个 LaTeX 用户级命令,如果命令已经定义,它会提醒你,请参阅\def 和 \newcommand 之间有什么区别?和\newcommand 和 \newcommand* 之间有什么区别?。
答案3
以下是一些可能性:
\documentclass{article}
\usepackage{stackengine}
\usepackage{scalerel}
\usepackage{xspace}
\begin{document}
\def\Dbar {\kern 0.2em\overline{\kern -0.2em D}{}\xspace}
\( \Dbar \)
\def\useanchorwidth{T}
\def\DDbar {\stackon[-1.5pt]{$D$}{\ensuremath{\kern.18em \textsf{\fontsize{6pt}{1em}\selectfont{\tiny(}---{\tiny)}}}}\xspace}
\(\DDbar\)
\def\sPlot {\ensuremath\ThisStyle{\hbox{$\SavedStyle_s$}{\mathcal P}lot}\xspace}
\( \sPlot_{\sPlot} \)
\end{document}
\DDbar
可以通过使用 -1.5pt 参数进一步调整垂直间隙。
对于\sPlot
,我使其能够按预期工作,\subscriptstyle
以及\textstyle
,如果这对您很重要的话。