新命令定义中的印刷问题

新命令定义中的印刷问题

先生,我对两个新命令有点小问题

  1. 我有这个我不喜欢的定义:

    \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}
    

    其中,我想要的不是单个条形图,而是括号内的条形图。

  2. 我的第二个问题是

    \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,如果这对您很重要的话。

在此处输入图片描述

相关内容