我想构建 Unicode 所称的“白色花括号”,并且还可以进行扩展。它们看起来像 ⦃ (≈ {|
) 和 ⦄ (≈ |}
) 并且具有 Unicode 代码点 U+2983 和 U+2984。
unicode-math
\lBrace
和一样\rBrace
,但是 (1) 我目前不使用 XeTeX 或 LuaTeX,而且 (2) 它们的设计(如图所示)unimath-symbols.pdf
在第 3-4 页上)不符合我的口味:括号部分对我来说太粗了,我希望竖线不要留下任何突出部分。我试图让它们在视觉上与括号\llparenthesis
、\rrparenthesis
、\llbracket
和\rrbracket
相匹配stmaryrd
。
现在我正在使用一个临时定义,这已经足够了,但符号无法缩放(一般情况下或使用\left
/时\right
)。以下是示例代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage[only,llbracket,rrbracket,llparenthesis,rrparenthesis]{stmaryrd} % for comparison with 4 similar parenthesis symbols
\usepackage{accsupp} % for ensuring the right Unicode codepoint upon pasting
\newcommand*{\llbrace}{%
\BeginAccSupp{method=hex,unicode,ActualText=2983}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char102}%
\mathchoice{\mkern-4.05mu}{\mkern-4.05mu}{\mkern-4.3mu}{\mkern-4.8mu}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char106}%
\EndAccSupp{}%
}
\newcommand*{\rrbrace}{%
\BeginAccSupp{method=hex,unicode,ActualText=2984}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char106}%
\mathchoice{\mkern-4.05mu}{\mkern-4.05mu}{\mkern-4.3mu}{\mkern-4.8mu}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char103}%
\EndAccSupp{}%
}
\begin{document}
\noindent
ok:
\(\displaystyle\llbrace abc \rrbrace\)
\(\textstyle\llbrace abc \rrbrace\)
\(\scriptstyle\llbrace abc \rrbrace\)
\(\scriptscriptstyle\llbrace abc \rrbrace\)
\noindent
ok:
\(\displaystyle \llbrace \frac{a}{b} \rrbrace\)
\(\textstyle\llbrace \frac{a}{b} \rrbrace\)
\(\scriptstyle\llbrace \frac{a}{b} \rrbrace\)
\(\scriptscriptstyle\llbrace \frac{a}{b} \rrbrace\)
\noindent
incorrectly scaled (\verb|\scriptsize|): {\scriptsize\(\llbrace abc \rrbrace\)} (large magnification required)
\noindent
incorrectly scaled (\verb|\tiny|): {\tiny\(\llbrace abc \rrbrace\)}
\noindent
\verb|\left| and \verb|\right| not possible before \verb|\llbrace| and \verb|\rrbrace|: \\
\indent \(\llbrace \left\llbracket\left\{\left[(a) \cdot bc^{2^3}\right]^4\right\}^5\right\rrbracket \rrbrace\)
% Note: This is also not possible with \llparenthesis and \rrparenthesis from stmaryrd.
\noindent
for comparison: \(\llparenthesis x \rrparenthesis, \llbracket x \rrbracket, \llbrace x \rrbrace; (x), [x], \{x\}\)
\end{document}
第 1 行和第 2 行看起来与当前设置完全一致。第 3 行和第 4 行表明我的定义不具有可扩展性。第 5a/b 行给出了我希望能够使用\left
和的示例\right
。第 6 行将不同类型的括号并列在一起以进行视觉比较。
有没有一种简单的方法来缩放我自己构建的字形?还是说设计新的字形是唯一的方法?虽然我的字形的垂直部分没有留下任何突出部分,但我的代码并没有解决“括号部分太粗”的问题。考虑到这一点:我认识到让字形的括号部分变细可能并不容易(如果你能做到,那就更棒了),但我认为任何解决方案解决任何手动构建的字形簇的缩放问题将对社会做出宝贵贡献。
对于稍微不同的设置(原始示例代码),
\RequirePackage{fix-cm}
\documentclass[12pt]{memoir}
\usepackage{fixltx2e}[2006/09/13]
\usepackage{amsmath}
\usepackage{txfonts}
\usepackage[only,llbracket,rrbracket,llparenthesis,rrparenthesis]{stmaryrd}
\usepackage{accsupp}
在序言中,\mkern-5.7mu
第四个参数需要 来\mathchoice
进行“正确”缩放。要查看该情况下出现的问题,最好添加一行,例如discontinuous small symbols in a footnote\footnote{\(\scriptscriptstyle\llbrace \frac{a}{b} \rrbrace\)}
。这可能有助于潜在的回答者测试情况。
答案1
使用scalerel
,您肯定可以解决这个\left
\right
问题。而且我认为我也解决了 tine 和 scriptsize 问题。我所做的是将 normalsize bbraces 的良好副本保存在框中,以便\lxbrace
和\rxbrace
会放置包含 bbraces 良好副本的框。然后我使用 scalerel 将这些框缩放到所需的大小。因此,本质上\lxbrace
和\rxbrace
替换了您的\llbrace
和\rrbrace
。
这里的关键是我正在缩放\normalsize
bbraces 的版本,而我认为您的原始字形所发生的情况是,LaTeX 括号的微型版本不仅仅是正常大小括号的缩放版本,而且 (由 LaTeX) 进行了修改以提高可读性。但在您的例子中,您不希望在缩小字形时修改其组件。
最后,scalerel 能够模拟缩放\left \right
支架以将其缩放到合适的尺寸,无论它是什么。我确实使用了宽度受限的缩放比例,以避免缩放后的支架看起来太笨重。
\documentclass{article}
\usepackage{amsmath}
\usepackage{scalerel}
\usepackage[only,llbracket,rrbracket,llparenthesis,rrparenthesis]{stmaryrd}
\parskip 1ex
\parindent 0ex
\usepackage{accsupp} % for ensuring the right Unicode codepoint upon pasting
\newcommand*{\llbrace}{%
\BeginAccSupp{method=hex,unicode,ActualText=2983}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char102}%
\mathchoice{\mkern-4.05mu}{\mkern-4.05mu}{\mkern-4.3mu}{\mkern-4.8mu}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char106}%
\EndAccSupp{}%
}
\newcommand*{\rrbrace}{%
\BeginAccSupp{method=hex,unicode,ActualText=2984}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char106}%
\mathchoice{\mkern-4.05mu}{\mkern-4.05mu}{\mkern-4.3mu}{\mkern-4.8mu}%
\textnormal{\usefont{OMS}{lmr}{m}{n}\char103}%
\EndAccSupp{}%
}
\begin{document}
\newsavebox{\lXbrace}
\savebox{\lXbrace}{$\llbrace$}
\newsavebox{\rXbrace}
\savebox{\rXbrace}{$\rrbrace$}
\def\lxbrace{\scalerel*{\usebox{\lXbrace}}{\llbrace}}
\def\rxbrace{\scalerel*{\usebox{\rXbrace}}{\rrbrace}}
\noindent
\verb|\tiny|: {\tiny\(\llbrace abc \rrbrace\)}
{\tiny\(\lxbrace abc \rxbrace\)}
$<-$scale of original brace
\verb,ORIGINAL:,%
\indent \(\llbrace \left\llbracket\left\{\left[(a) \cdot
bc^{2^3}\right]^4\right\}^5\right\rrbracket \rrbrace\)
\\\verb,FIXED: ,%
\def\core{ \left\llbracket\left\{\left[(a) \cdot
bc^{2^3}\right]^4\right\}^5\right\rrbracket}%
\indent \(\scalerel[1.5ex]{\lxbrace}{\core}\scalerel*[1.5ex]{\rxbrace}{\core}\)
bbraces scaled, but limited to 1.5ex width
\end{document}
我编辑了原始图像(通过缩放)以显示 scalerel 如何获取 bbrace 并垂直缩放它们以适合它们所包围的数学对象。顶部方程没有 scalerel,底部方程有 scalerel。
我还添加了对尺寸对象的缩放\tiny
,以便可以看到缩放正常尺寸字形的效果,而不是让 LaTeX 缩放支柱和支架然后将它们粘在一起。左侧版本让 LaTeX 缩放组成字符的字形,而右侧图像让 scalerel 包\normalsize
按\tiny
比例缩放字符。
根据能够提供水平压缩的要求,为了使字形更好地与文献中的可比对应物相匹配,我今天升级了 scalerel 包(至 v1.3),添加了以下复合命令
\newcommand\scaleleftright[4][99in]{%
\if.#2\def\leftarg{\bl@nk}\else\def\leftarg{#2}\fi%
\if.#4\def\rightarg{\bl@nk}\else\def\rightarg{#4}\fi%
\scalerel[#1]{\leftarg}{#3}\scalerel*[#1]{\rightarg}{#3}%
}
\newcommand\stretchleftright[4][10000]{%
\if.#2\def\leftarg{\bl@nk}\else\def\leftarg{#2}\fi%
\if.#4\def\rightarg{\bl@nk}\else\def\rightarg{#4}\fi%
\stretchrel[#1]{\leftarg}{#3}\stretchrel*[#1]{\rightarg}{#3}%
}
\newcommand\hstretch[2]{\stretchrel*{\scalebox{#1}{$#2$}}{#2}}
\newcommand\vstretch[2]{\stretchrel*{#2}{\scalebox{#1}{$#2$}}}
这些命令以数学模式的和命令...leftright
的方式为符号提供自动缩放。但和命令允许用户根据需要进行字形拉伸。使用他之前的示例,我进一步完善了他的白色花括号符号的定义,如下所示\left
\right
\hstretch
\vstretch
\def\lxbrace{%
\hstretch{0.6}{\scalerel*{\usebox{\lXbrace}}{\llbrace}}}
\def\rxbrace{%
\hstretch{0.6}{\scalerel*{\usebox{\rXbrace}}{\rrbrace}}}
这为他的复合字形字符提供了 40% 的水平压缩。因此,为了进行比较(现在是正常尺寸,而不是微小尺寸),我最初的更正与最新的更正:
答案2
这是一个穷人的做法。它可能不符合要求:
\documentclass{article}
\begin{document}
\Huge
$\left\lbrace\mkern-2mu\middle| ABC^{\left\lbrace\mkern-2mu\middle| XYZ\middle|\mkern-2mu\right\rbrace} \middle|\mkern-2mu\right\rbrace$
\end{document}