如果数字包含零,则更改为带点的零

如果数字包含零,则更改为带点的零

平均能量损失

\documentclass[a4paper,11pt]{article}
\usepackage{calculator}
\usepackage{calculus}
\usepackage{xlop}
\usepackage{pst-node}

%%%%%%%%%%%%% Dotted Zero
\makeatletter
\newcommand*{\pmzerodot}{%
\nfss@text{%
\sbox0{$\vcenter{}$}% math axis
\sbox2{0}%
\sbox4{0\/}%
\ooalign{%
0\cr
\hidewidth
\kern\dimexpr\wd4-\wd2\relax % compensate for slanted fonts
\raise\dimexpr(\ht2-\dp2)/2-\ht0\relax\hbox{%
\if b\expandafter\@car\f@series\@nil\relax
\mathversion{bold}%
\fi
$\cdot\m@th$%
}%
\hidewidth
\cr
\vphantom{0}% correct depth of final symbol
}%
}%
}
\makeatother

\newcommand\dnm{12}
\newcommand\uyg{1}
\newcommand\uygkats{0,20}

\MULTIPLY{\dnm}{\uyg}\W
\MULTIPLY{\W}{\uygkats}\uygdvmsz
\ROUND[2]{\uygdvmsz}{\uygdvmsz}

\ROUND[0]{\uygdvmsz}\yuhaf
\INTEGERQUOTIENT{\yuhaf}{\uyg}\uhaf
\MODULO{\yuhaf}{\uyg}\usat

\begin{document}

\W\ $\cdot$ \uygkats\ = \uygdvmsz

\begin{center}
\opidiv[columnwidth=0.5em,operandstyle.2=\blue,resultstyle=\red]{\yuhaf}{\uyg}
\end{center}
{\color{red}\uhaf{}} week \usat{} hour
\end{document}

并输出

在此处输入图片描述

我想要的是,所有零都是带点的零。\pmzerodot我应该怎么做?

在此处输入图片描述

答案1

这取决于您使用的主要字体。我尝试了您的 MWE,并检测到\fontname\font您正在使用。因此,我们准备了一个从字体派生的cmr10 at10.95pt虚拟字体。cmr10vcmr10

cd对文档所在的工作目录执行此操作。然后输入命令:

tftopl cmr10 > cmr10v.vpl

编辑新建的文件,在CHECKSUM所在行后cmr10v.vpl添加命令:MAPFONT

(MAPFONT D 0
   (FONTNAME cmr10)
   (FONTAT R 1.0)
   )

查找定义CHARACTER C 0并通过以下方式更改此定义:

(CHARACTER C 0
   (CHARWD R 0.500002)
   (CHARHT R 0.644444)
   (MAP
      (PUSH) (MOVEUP R 0.252) (MOVERIGHT R 0.114) (SETCHAR O 56) (POP)
      (SETCHAR C 0)   
      )
   )

保存并在命令行上运行命令:

vptovf cmr10v

现在,您的工作目录中有了文件cmr10v.vfcmr10v.tfm。这意味着字体cmr10v已准备好在您的工作目录中使用。

将主字体的选择从原来cmr10 at10.95的改为cmr10v at10.95。如何做到这一点取决于所使用的字体选择系统。我希望您使用符合 NFSS 的方式来做到这一点。我不想花时间研究 NFSS,所以我建议只使用简单的\reselectfont宏:

\begin{document}
\def\reselectfont#1 #2\relax{\font\f=#1v #2\relax \f}
\expandafter\reselectfont\fontname\font\relax

% The test of your text follows:

\W\ $\cdot$ \uygkats\ = \uygdvmsz

\begin{center}
\opidiv[columnwidth=0.5em,operandstyle.2=\blue,resultstyle=\red]{\yuhaf}{\uyg}
\end{center}
{\color{red}\uhaf{}} week \usat{} hour
\end{document}

结果:

零点

答案2

签出包裹新文本

\usepackage[zerostyle=d]{newtxtt}

然后\texttt{0}将排版一个带点的零。

答案3

你可以尝试这个:

\documentclass{article}

\catcode`\0=\active
\newcommand\ifzero{20}
\newenvironment{specialzero}{%
\catcode`\0=\active\def 0{bla}}{}
% resetting the catcode when closing the environment is not needed
% as per Manuel's answer 
\catcode`\0=12

\begin{document}

\begin{specialzero}
0       
\ifzero
\end{specialzero}

0
% \ifzero %%%% This won't work!

\rule{10pt}{1pt}
\end{document}

然而,当在specialzero环境中时,它不是可以将零用于任何其他目的,例如作为图片或另一个宏中的参数。

相关内容