可变大小的鱼叉分隔符

可变大小的鱼叉分隔符

我想要一个大小可变的 ams 符号\downharpoonleft\downharpoonright和分隔符版本\upharpoonleft\upharpoonright以便它们可以与\left和 一起使用\right。是否有任何软件包提供类似的东西?

摘自symbols-a4.pdf

答案1

支持\left\right

\left并由文件\right属性支持TFM。符号可以以不同的大小给出,并在文件中构建一个按大小升序排列的字符列表TFM。列表中的最后一个条目是可扩展字符。后者在文档tftopl§ 14 中简要解释:

14. 可扩展字符由 指定extensible_recipe,它由四个字节组成,称为topmidbotrep (按此顺序)。这些字节是用于构建大符号的各个部分的字符代码。如果topmidbot为零,则它们不会出现在构建结果中。例如,可扩展垂直线类似于可扩展括号,只是缺少顶部和底部部分。

\left为和创建支持的秘诀\right

  1. 需要一些真正的字体(Type 1,…),其中包含字符,尤其是构建可扩展字符所需的部分。程序 t1disasmt1asm可能通过从现有字体中学习来帮助完成此任务。

  2. TFM文件使用正确的数据结构创建,引用上一步的字体。程序tftoplpltotf帮助将TFM文件转换为可读格式并转换回来。的文档还包含文件格式及其数据结构tftopl的描述。TFM

  3. TeX/LaTeX 中新数学字体及其符号的定义。

此食谱适用于更有经验且有足够时间(数小时甚至数天)的人士。

穷人的解决方案\resizebox

下面我修改了一个使用\resizeboxgraphics(或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}

示例文件的结果

相关内容