免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

两个符号重叠

转自:http://bbs.ctex.org/forum.php?mod=viewthread&tid=153333 一个月前弄的,差点忘了存档。

要弄这样的符号

试着写了一个有通用性的重叠命令,缺陷及副作用尚未明确 :D
\(\begin{代码}
\documentclass{ctexart}
\usepackage{amsmath,amssymb}
\usepackage{mathtools}

%符号重叠命令\fhcd[类型]{符号}{符号}
%类型是最终输出的符号的类型(bin, rel, ord 等,默认 bin),两符号顺序随意
\makeatletter
\newcommand\fhcd[3][bin]{
\csname math#1\endcsname{\mathchoice
{\@fhcd\displaystyle{#2}{#3}}
{\@fhcd\textstyle{#2}{#3}}
{\@fhcd\scriptstyle{#2}{#3}}
{\@fhcd\scriptscriptstyle{#2}{#3}}}}
\newcommand\@fhcd[3]{
\settowidth\@tempdima{$\m@th#1{#2}$}
\settowidth\@tempdimb{$\m@th#1{#3}$}
\ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
\kern.5\@tempdima\mathclap{#2}\mathclap{#3}\kern.5\@tempdima}
\makeatother

\begin{document}

这样,第一个可以这样定义
\newcommand\cttdiv{\fhcd\bigtriangledown\cdot}

效果 $A\cttdiv B = A\bigtriangledown B\cdot C$
\[A\cttdiv B + \frac{\frac{A\cttdiv B}{A\cttdiv B}}{A\cttdiv B}\]

第二个直接这样定会有瑕疵
\newcommand\cttcurl{\fhcd\bigtriangledown\times}%
$A\cttcurl B$

突了点儿,只能调整下了,比如
\renewcommand\cttcurl{\fhcd\bigtriangledown
{\text{\raisebox{0.25ex}{\scalebox{0.75}{$\times$}}}}}%
$A\cttcurl B+\frac{A\cttcurl B}2$

还可以搞些其他东西

长的不等价
\let\iff\Longleftrightarrow
\newcommand\niff{\fhcd[rel]/\iff}
$A\niff B\iff C+\frac{A\niff B}{A\iff B}$

斜的不平行
\newcommand\px{\mathrel{/\mkern-5mu/}}%
\newcommand\npx{\fhcd[rel]\px\smallsetminus}%
$AB\px CD\npx EF$

无聊的
\newcommand\asdf{\fhcd[ord]\leftrightarrow\updownarrow}%
\newcommand\aaaa{\fhcd[ord]\nearrow\searrow}%
\newcommand\bbbb{\fhcd[ord]\nwarrow\swarrow}%
\newcommand\cccc{\fhcd[ord]\aaaa\bbbb}%
$\asdf \ \cccc$

\end{document}
\end{代码}\)

效果见:https://www.texide.com/project/593d8c47de33274f5f5ed6ea
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

https://liam0205.me/2017/06/30/c ... symbols-by-ooalign/
(使用 \ooalign 命令创建叠加在一起的记号)
这个帖讲的看起来更高大上一些,暂时还没完全理解……那个什么 \hidewidth ……还有后面那些……有空再研究下
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

回复 2# kuing

“\ooalign 中,每一行都复写在上一行之上”
“\hidewidth 定义是 \hskip -1000pt plus 1fill”
照这两点来理解就能解释如下结果:
  1. \documentclass{article}
  2. \usepackage{xcolor}
  3. \begin{document}

  4. \newcommand\testoo[1]{\fbox{{%
  5. \ooalign{%
  6. Q\cr
  7. #1\crcr
  8. }}}\par}

  9. \fboxsep=0pt

  10. \newcommand\x{{\color{red}x}}
  11. \newcommand\y{{\color{green}y}}
  12. \renewcommand\o{{\color{blue}o}}
  13. \newcommand\xx{{\color{red}xxxx}}
  14. \newcommand\yy{{\color{green}yyyyyy}}
  15. \newcommand\oo{{\color{blue}ooo}}

  16. \testoo{}
  17. \testoo{\x\hidewidth}
  18. \testoo{\hidewidth\y}
  19. \testoo{\hidewidth\o\hidewidth}
  20. \testoo{\xx\hidewidth}
  21. \testoo{\hidewidth\yy}
  22. \testoo{\hidewidth\oo\hidewidth}
  23. \testoo{\xx\hidewidth\yy}
  24. \testoo{\xx\hidewidth\oo\hidewidth}
  25. \testoo{\hidewidth\oo\hidewidth\yy}
  26. \testoo{\xx\hidewidth\oo\hidewidth\yy}
  27. \end{document}
复制代码
oo.png
2018-10-6 09:47


除此之外,如果注意一下细节——深度,似乎 ooalign 的最终深度似乎只取决于最后一行,进而猜测:高度只取决于第一行?测试了一下似乎确实如此:
  1. \fbox{{\ooalign{k\cr q\crcr}}} \fbox{{\ooalign{q\cr k\crcr}}}
复制代码
得出:
QQ截图20181006095945.png
2018-10-6 09:59


这样看的话,ooalign 的方法还是存在缺陷嘀……
比如说文中用 {\ooalign{\$\bigcup\$\cr\hidewidth\$\bullet\$\hidewidth\cr}} 构造的 `\bigcup` 与 `\bullet` 重叠的符号,用 \fbox 来框一下就很清楚了:
  1. \fbox{\$\bullet\$}
  2. \fbox{\$\bigcup\$}
  3. \fbox{{\ooalign{\$\bigcup\$\cr\hidewidth\$\bullet\$\hidewidth\cr}}}
复制代码
QQ截图20181006101527.png
2018-10-6 10:15

原因就是后者深度由 \bullet 决定。
虽然多数时候没什么影响,但如果处于某些特殊情况下(例如繁分式),垂直间距或许就会有问题(贴得太近)。
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

返回列表 回复 发帖