是否可以制作一个方框内的 % 符号?我想用它来表示函数 f(n,m) = n-(n % m)。如 n symbol
m。
或者...对于这种符号有更好的想法吗?
答案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
紧,并且对于\mathpalette
see这个惊人的解释埃格尔。
需要说明的是,如果非方框百分号没有意义,则可以直接使用那个: 。没有方框,因此在这种情况下\newcommand*\opmod{\mathbin{\%}}
不需要。\mathpalette
答案2
这个答案是 tohecz 的延续回答。
此外还解决了以下问题:
- 正方形
- 规则宽度取决于尺寸。
- 圆角
- 方框符号缩小了,其高度与大写字母相同,并放在基线上。
- 内边距相等,不添加附加侧轴承,并将侧轴承放在盒子外面。
讨论:
的边界框
%
不是正方形。可以添加额外的边距以将框架增加到正方形。或者可以调整符号的大小。在这种情况下,符号离正方形不远,因此稍微扭曲造成的损害比不同的内边距要小。通过比较正常尺寸下符号的高度与当前尺寸下符号的高度来计算规则宽度适应的比例因子。
tikz
使用'可以轻松制作圆角line join=round
。使用 、和可以轻松缩小和移动盒子。盒子的尺寸可以在这些命令的参数中使用,通过
\resizebox
、、...\scalebox
\raisebox
\width
\height
消除侧边距是最困难的部分,因为 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
,除非使用更复杂的数学表达式代替百分号。