我想要一个大小可变的 ams 符号\downharpoonleft
、\downharpoonright
和分隔符版本\upharpoonleft
,\upharpoonright
以便它们可以与\left
和 一起使用\right
。是否有任何软件包提供类似的东西?
答案1
支持\left
和\right
\left
并由文件\right
属性支持TFM
。符号可以以不同的大小给出,并在文件中构建一个按大小升序排列的字符列表TFM
。列表中的最后一个条目是可扩展字符。后者在文档tftopl
§ 14 中简要解释:
14. 可扩展字符由 指定
extensible_recipe
,它由四个字节组成,称为top
、mid
、bot
和rep
(按此顺序)。这些字节是用于构建大符号的各个部分的字符代码。如果top
、mid
或bot
为零,则它们不会出现在构建结果中。例如,可扩展垂直线类似于可扩展括号,只是缺少顶部和底部部分。
\left
为和创建支持的秘诀\right
:
需要一些真正的字体(Type 1,…),其中包含字符,尤其是构建可扩展字符所需的部分。程序
t1disasm
和t1asm
可能通过从现有字体中学习来帮助完成此任务。该
TFM
文件使用正确的数据结构创建,引用上一步的字体。程序tftopl
和pltotf
帮助将TFM
文件转换为可读格式并转换回来。的文档还包含文件格式及其数据结构tftopl
的描述。TFM
TeX/LaTeX 中新数学字体及其符号的定义。
此食谱适用于更有经验且有足够时间(数小时甚至数天)的人士。
穷人的解决方案\resizebox
下面我修改了一个使用\resizebox
包graphics
(或graphicx
)的示例文件。缺点是线宽也会按比例缩放,但对于大尺寸来说这太多了。
黑客试图考虑:
- 分隔符位于数学轴的中心。
- 支持下标的自动调整大小,...(通过
\mathpalette
)。 - 鱼叉的边界框在钩子的另一侧有水平的空白。对于较大的尺寸,它缩放得太多。因此,首先剥离空白,然后重新插入非脚本样式的细空间和脚本样式的半细空间。
- …
示例文件:
\documentclass{article}
\usepackage{amssymb}
\usepackage{graphics}
\makeatletter
\newcommand*{\scaleddelims}[3]{%
\ensuremath{%
\mathpalette{\@scaleddelims{#1}{#2}}{#3}%
}%
}
\newcommand*{\@scaleddelims}[4]{%
% #1: left delimiter
% #2: right delimiter
% #3: \displaystyle, \textstyle, ...
% #4: inner formula
\begingroup
#3%
\sbox0{$\m@th#3\vphantom{A}#4$}%
\setbox2\vbox{\hbox{$\m@th#3#1$}\kern\z@}%
\setbox4\vbox{\hbox{$\m@th#3#2$}\kern\z@}%
\setbox6\hbox{$#3\vcenter{}$}%
\ifx\downharpoonleft#1\relax
\let\DelimLeft=L%
\else\ifx\upharpoonleft#1%
\let\DelimLeft=L%
\else\ifx\downharpoonright#1%
\let\DelimLeft=R%
\else\ifx\upharpoonright#1%
\let\DelimLeft=R%
\fi\fi\fi\fi
\ifx\downharpoonleft#2\relax
\let\DelimRight=L%
\else\ifx\upharpoonleft#2\relax
\let\DelimRight=L%
\else\ifx\downharpoonright#2\relax
\let\DelimRight=R%
\else\ifx\upharpoonright#2\relax
\let\DelimRight=R%
\fi\fi\fi\fi
\ifx\DelimLeft L%
\wd2=.6\wd2
\fi
\ifx\DelimRight L%
\wd4=.6\wd4
\fi
\ifx\DelimLeft R%
\sbox2{\kern-.4\wd2\box2}%
\fi
\ifx\DelimRight R%
\sbox4{\kern-.4\wd4\box4}%
\fi
\dimen0=\ht0 %
\advance\dimen0 by -\ht6 %
\dimen2=\dp0 %
\advance\dimen2 by \ht6 %
\ifdim\dimen2>\dimen0 %
\dimen0=\dimen2 %
\else
\dimen0=\dimen0 %
\fi
\dimen2=\ht6 %
\advance\dimen2 by -\dimen0 %
\dimen0=2\dimen0 %
\def\DelimCorr{%
\mskip.5\thinmuskip
\nonscript\mskip.5\thinmuskip
}%
\mathopen{%
\ifx\DelimLeft R\DelimCorr\fi
\raisebox{\dimen2}{\resizebox{!}{\dimen0}{\box2}}%
\ifx\DelimLeft L\DelimCorr\fi
}%
\begingroup
#3#4%
\endgroup
\mathclose{%
\ifx\DelimRight R\DelimCorr\fi
\raisebox{\dimen2}{\resizebox{!}{\dimen0}{\box4}}%
\ifx\DelimRight L\DelimCorr\fi
}%
\endgroup
}
\makeatother
\begin{document}
$ x + \scaleddelims{\downharpoonleft}{\downharpoonright}{\frac{4x}{x^2+3}}
+ \scaleddelims\downharpoonleft\downharpoonright{\frac\cdot{\frac XY}}
+ \scaleddelims\downharpoonleft\downharpoonright{\frac{\frac XY}\cdot}
$
\bigskip
$ x + \left\rfloor \frac{4x}{x^2+3} \right\lfloor
+ \left\rfloor \frac\cdot{\frac XY} \right\lfloor
+ \left\rfloor \frac{\frac XY}\cdot \right\lfloor
$
\bigskip
$ \mathopen{\downharpoonleft} x \mathclose{\downharpoonright} =
\scaleddelims{\downharpoonleft}{\downharpoonright}{x} =
\rfloor x \lfloor
\qquad
\scaleddelims\downharpoonleft\downharpoonright{}
$
\bigskip
$ y \scaleddelims\downharpoonright\downharpoonleft{\frac ab} z
^{\scaleddelims\downharpoonleft\downharpoonright{c}}
$
\end{document}