方框中的百分号

方框中的百分号

是否可以制作一个方框内的 % 符号?我想用它来表示函数 f(n,m) = n-(n % m)。如 n symbolm。

或者...对于这种符号有更好的想法吗?

答案1

这应该是一个合理的选择:

在此处输入图片描述

\documentclass{article}

%\newcommand*\boxmodpalette[2]{\mathbin{{\fboxsep0pt\fbox{$#1\%$}}}}
%\newcommand*\boxmod{\mathpalette\boxmodpalette{}}

\usepackage{graphicx}
\newcommand*\boxmodpalette[2]{\mathbin{\raisebox{0.1\height}{\scalebox{0.8}{{\fboxsep0pt\fbox{$#1\%$}}}}}}
\newcommand*\boxmod{\mathpalette\boxmodpalette{}}

\begin{document}

\[
    A = B \boxmod C _ {B \boxmod C}
\]

\end{document}

它有什么作用?\mathbin使它成为一个二元运算符,如+is,\fboxsep0pt使以下\fbox紧,并且对于\mathpalettesee这个惊人的解释埃格尔

需要说明的是,如果非方框百分号没有意义,则可以直接使用那个: 。没有方框,因此在这种情况下\newcommand*\opmod{\mathbin{\%}}不需要。\mathpalette

答案2

这个答案是 tohecz 的延续回答

结果

此外还解决了以下问题:

  1. 正方形
  2. 规则宽度取决于尺寸。
  3. 圆角
  4. 方框符号缩小了,其高度与大写字母相同,并放在基线上。
  5. 内边距相等,不添加附加侧轴承,并将侧轴承放在盒子外面。

讨论:

  1. 的边界框%不是正方形。可以添加额外的边距以将框架增加到正方形。或者可以调整符号的大小。在这种情况下,符号离正方形不远,因此稍微扭曲造成的损害比不同的内边距要小。

  2. 通过比较正常尺寸下符号的高度与当前尺寸下符号的高度来计算规则宽度适应的比例因子。

  3. tikz使用'可以轻松制作圆角line join=round

  4. 使用 、和可以轻松缩小和移动盒子。盒子的尺寸可以在这些命令的参数中使用,通过\resizebox、、...\scalebox\raisebox\width\height

  5. 消除侧边距是最困难的部分,因为 TeX 不知道侧边距的大小。它只使用包含侧边距的官方字形边界框。

    可以尝试使用 LuaTeX 查看内部字体数据。运气好的话,可以得到侧边距的大小。

以下文件可用于手动查找不同数学尺寸的侧轴承尺寸1

\documentclass{standalone}
\usepackage{color}

\makeatletter
\newcommand*{\test@}[3]{%
  \hbox{%
    \sbox0{$\color{yellow}#1\%\m@th$}%
    \vrule
    \rlap{%
      \color{red}%
      \rule[-\dp0]{\wd0}{\dimexpr\ht0+\dp0\relax}%
    }%
    \rlap{%
      \color{blue}%
      \kern#2\wd0 %
      \rule[-\dp0]{\dimexpr\wd0-#2\wd0-#3\wd0\relax}{\dimexpr\ht0+\dp0\relax}%
      \kern#3\wd0 %
    }%
    \copy0 %
    \vrule
  }%
}
\newcommand*{\test}[8]{%
%  \vbox{\baselineskip=0pt \lineskip=0pt \def\,{\vskip.1pt}%
  \mbox{%
    \test@\displaystyle{#1}{#2}\,%
    \test@\textstyle{#3}{#4}\,%
    \test@\scriptstyle{#5}{#6}\,%
    \test@\scriptscriptstyle{#7}{#8}%
  }%
}
\makeatother

\begin{document}  
  \test {.065} {.07}
        {.065} {.07}
        {.07}  {.075}
        {.085} {.09}
\end{document}

侧轴承

红色条表示侧边距,蓝色框表示字符的可视边界框。“官方”边界框用黑色条标记。的参数值\test是四种数学样式的左侧和右侧边距。它们表示为字符宽度的因子。

现在我们可以把各个部分放在一起(参见答案顶部的结果):

\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}

\makeatletter
\newcommand*{\squareboxed@}[5]{%
  \sbox0{$#1#2\m@th$}%
  % remove side bearings
  \sbox0{%
    \kern-#4\wd0 %
    \unhcopy0 %
    \kern-#5\wd0 %
  }%
  % resize to square
  \dimen@=\dimexpr\ht0+\dp0-\wd0\relax
  \ifdim\dimen@=\z@
  \else
    \sbox0{\resizebox{\totalheight}{\height}{\unhcopy0}}%
  \fi
  % shrink and put on math axis
  \sbox2{$#1\vcenter{}$}%
  \sbox0{%
    \raisebox{\ht2}{%
      \scalebox{#3}{%
        \raisebox{.5\dimexpr\dp0-\ht0\relax}{\unhcopy0}%
      }%
    }%
  }%
  % scale \fboxrule
  \sbox2{$1$}%
  \sbox4{$#11$}%
  \fboxrule=\dimexpr\fboxrule*\ht4/\ht2\relax
  % add inner sep
  \fboxsep=.5\dimexpr#4\wd0+#5\wd0\relax
  \kern\fboxsep
  \sbox2{$#1X$}%
  \resizebox{!}{\ht2}{%
    \raisebox{\depth}{%
      \tikz[
        inner sep=\fboxsep,
        line width=\fboxrule,
        line join=round,
        baseline=(X.base),
      ]
        \node[draw](X){\copy0}%
      ;%
    }%
  }%
  \kern\fboxsep
}
\newcommand*{\squareboxed}[8]{%
  \mathchoice
    {\squareboxed@\displaystyle{#1}{#2}{#3}{#4}}%
    {\squareboxed@\textstyle{#1}{#2}{#3}{#4}}%
    {\squareboxed@\scriptstyle{#1}{#2}{#5}{#6}}%
    {\squareboxed@\scriptscriptstyle{#1}{#2}{#7}{#8}}%
}

\newcommand*{\boxmod}{%
  \mathbin{%
    \squareboxed
      {\%}   {.8}
      {.065} {.07}
      {.07}  {.075}
      {.085} {.09}%
  }%
}
\makeatother

\begin{document}

  \noindent
  $ X \boxmod Y$\\
  $ r \boxmod i ^ {r \boxmod i ^ {r \boxmod i}}$\\
  $ n - (n \boxmod m)$

\end{document}

1\displaystyle和的字体大小通常相同\textstyle。因此,可以通过省略大小写来简化\dislaystyle,除非使用更复杂的数学表达式代替百分号。

相关内容