对于我的论文,我需要特定的括号来定义一些运算符。我发现\llceil
,,\rrceil
和\llfloor
\rrfloor
对于我的论文stmaryrd
包裹,这正是我想要的。不幸的是,它们不支持\left
和\right
,因此它们在处理高公式时看起来非常丑陋。它们可能不是为这样的公式设计的。
有没有一种简单的方法可以使它们支撑\left
和\right
/或定义支持它们的其他支架?
答案1
它并不完美,因为字形的拉伸会使水平笔划变粗,但它可能足以满足您的需求。宏\stretchleftright{}{}{}
将拉伸参数 1 和 3 以满足参数 2 的垂直范围。
相关答案是定义可扩展的“白色花括号” {| 和 |} (⦃ 和 ⦄)
\documentclass{article}
\usepackage{stmaryrd}
\usepackage{scalerel}
\begin{document}
\[
\llceil x\rrceil ~~~\llfloor y \rrfloor
\]
\[
\stretchleftright{\llceil}{\frac{x^2}{y_2}}{\rrceil}~~~
\stretchleftright{\llfloor}{\sqrt{y^2}}{\rrfloor}
\]
\end{document}
另一种方法是将两个普通的“ceil”粘在一起。这样可以避免横笔变粗,但必须与另一个“双”字形匹配。
\documentclass{article}
\def\llceil{\left\lceil\kern-3.5pt\left\lceil}
\def\rrceil{\right\rceil\kern-3.5pt\right\rceil}
\begin{document}
\[
\llceil\frac{x^2}{y_2}\rrceil
\]
\end{document}
答案2
\llceil
、\rrceil
和\llfloor
的符号\rrfloor
均stmaryrd
采用单一尺寸。
您可以定义带有参数的宏\dceil
和\dfloor
;使用\dceil*
可自动扩展的分隔符生成一个数字可选参数,该参数会在所使用的两个\lceil
或之间添加一些负的字距\rceil
。如果没有,则*
可选参数可以是\big
、\Big
或。 也一样。\bigg
\Bigg
\dfloor
\documentclass{article}
\usepackage{amsmath,xparse,stmaryrd}
\ExplSyntaxOn
\NewDocumentCommand{\dceil}{sO{0}m}
{
\IfBooleanTF{#1}
{
\spiros_ceilfloor_ext:nnnn { #2 } { #3 } { \lceil } { \rceil }
}
{
\spiros_ceilfloor:nnnn { #2 } { #3 } { \lceil } { \rceil }
}
}
\NewDocumentCommand{\dfloor}{sO{0}m}
{
\IfBooleanTF{#1}
{
\spiros_ceilfloor_ext:nnnn { #2 } { #3 } { \lfloor } { \rfloor }
}
{
\spiros_ceilfloor:nnnn { #2 } { #3 } { \lfloor } { \rfloor }
}
}
\cs_new_protected:Npn \spiros_ceilfloor_ext:nnnn #1 #2 #3 #4
{
\left#3
\mkern-\muskip_eval:n { 4.5mu + #1mu }
\left#3
#2
\right#4
\mkern-\muskip_eval:n { 4.5mu + #1mu }
\right#4
}
\cs_new_protected:Npn \spiros_ceilfloor:nnnn #1 #2 #3 #4
{
\mathopen{\str_if_eq:nnF { #1 } { 0 } { #1 }#3}
\mkern\spiros_kern:n { #1 }
\mathopen{\str_if_eq:nnF { #1 } { 0 } { #1 }#3}
#2
\mathclose{\str_if_eq:nnF { #1 } { 0 } { #1 }#4}
\mkern\spiros_kern:n { #1 }
\mathclose{\str_if_eq:nnF { #1 } { 0 } { #1 }#4}
}
\cs_new:Npn \spiros_kern:n #1
{
\str_case:nnF { #1 }
{
{ \big }{ -4.5mu }
{ \Big }{ -5.5mu }
{ \bigg }{ -6.5mu }
{ \Bigg }{ -7.5mu }
}
{ -4.5mu }
}
\ExplSyntaxOff
\begin{document}
\[
\llceil x\rrceil\\
\dceil*{x} \quad
\dceil*{\frac{x}{2}}\quad
\dceil*[1]{\frac{x}{2}}\quad
\dceil*[3]{\frac{\dfrac{x}{2}}{\dfrac{y}{3}}}
\]
\[
\dceil{x}\quad
\dceil[\big]{x}\quad
\dceil[\Big]{x}\quad
\dceil[\bigg]{x}\quad
\dceil[\Bigg]{x}
\]
\[
\llfloor x\rrfloor\\
\dfloor*{x} \quad
\dfloor*{\frac{x}{2}}\quad
\dfloor*[1]{\frac{x}{2}}\quad
\dfloor*[3]{\frac{\dfrac{x}{2}}{\dfrac{y}{3}}}
\]
\[
\dfloor{x}\quad
\dfloor[\big]{x}\quad
\dfloor[\Big]{x}\quad
\dfloor[\bigg]{x}\quad
\dfloor[\Bigg]{x}
\]
\end{document}
当\dceil*
和\dfloor*
达到一定尺寸(对应于\bigg
)时,无需校正,结果似乎可以接受;超过该尺寸时,需要进行校正。
也许可以根据强制参数的大小自动进行更正。