切换到宽版
用户名
Email
自动登录
找回密码
密码
登录
快速注册
快捷导航
论坛
悠闲数学娱乐论坛(第3版)
淘帖
大家一起来整理好帖子
相册
Album
标签
查看所有主题标签
搜索
初等数学讨论
高等数学讨论
TeX / LaTeX
搜索
AND
OR
exact
regexp
全文
Aa
本版
用户
悠闲数学娱乐论坛(第3版)
»
论坛
›
软件区
›
TeX / LaTeX
›
case 套 case
返回列表
发新帖
查看:
508
|
回复:
5
case 套 case
[复制链接]
[复制标题+链接+出处]
kuing
kuing
当前离线
积分
93593
730
主题
1万
回帖
9万
积分
积分
93593
显示全部楼层
发消息
kuing
发表于 2021-8-19 01:02
|
阅读模式
在 LaTeX 中,常规方法输入得到左边,本帖要将它变成右边。
N 年前的这帖
kuing.cjhb.site/forum.php?mod=viewthread&tid=332
利用 \smash 弄过最简单的情形,但当年并没说清楚一个细节,如果用 \boxed 给当年那个公式加个框:
$\boxed{
\left.\begin{aligned}
\smash{\left.\begin{aligned}
a\perp\alpha\\
l\subset\alpha
\end{aligned}\right\}}
\Rightarrow a\perp l\\
a\sslash b
\end{aligned}\right\}
\Rightarrow b\perp l
}$
所以如果这个公式上面还有东西,就有可能产生重叠。
因此像开头那种复杂的多层嵌套的情形,仅用 \smash 是不够的,不仅会和外面的东西重叠,连里面也会。要解决它得想办法在外面补回应有的高度或深度,为此我鼓捣了两天才搞出下面的方法,过程及原理这里不细讲了,直接看代码吧。
导言区:
\documentclass{article}
\usepackage{mathtools}
\newcommand\smt[1]{\smash[t]{#1}}
\newcommand\smb[1]{\smash[b]{#1}}
\newsavebox\Obox\newsavebox\Bbox\newsavebox\Tbox
\newsavebox\outbox
\newcommand\kkkkk[1]{%
\sbox\Obox{$
\renewcommand\smt[1]{##1}
\renewcommand\smb[1]{##1}
\displaystyle#1$}%
\sbox\Bbox{$
\renewcommand\smt[1]{##1}
\renewcommand\smb[1]{\smash[b]{##1}}
\displaystyle#1$}%
\sbox\Tbox{$
\renewcommand\smt[1]{\smash[t]{##1}}
\renewcommand\smb[1]{##1}
\displaystyle#1$}%
\sbox\outbox{%
\vphantom{\raise\dimexpr
\dp\Obox-\dp\Tbox-\ht\Obox+\ht\Bbox
\relax\box\Obox}%
\renewcommand\smt[1]{\smash[t]{##1}}%
\renewcommand\smb[1]{\smash[b]{##1}}%
$\displaystyle#1$}%
\box\outbox
}
\newcommand\case[1]{{}\begin{dcases}\relax#1\end{dcases}}
\newcommand\caseo[1]{\kkkkk{\case{#1}}} %补全距,用于外层及中间
\newcommand\caset[1]{\smt{\kkkkk{\case{#1}}}}%去高度,用于顶上的
\newcommand\caseb[1]{\smb{\kkkkk{\case{#1}}}}%去深度,用于底下的
\newcommand\casetz[1]{\smt{\case{#1}}} %最后一层专用(为节约资源)
\newcommand\casebz[1]{\smb{\case{#1}}} %最后一层专用(为节约资源)
复制代码
注:这里用 mathtools 宏包只是为了用它的 dcases 环境(比 cases 好),此外该包自动加载 amsmath。
正文用法:
最简单的两层:
\fbox{%
\caseo{
k\casetz{k\\kk}\\
kkk\casebz{k\\kk\\kkk\\kkkk}
}%
}
复制代码
注:套一层 \fbox 只为看看边界有没有问题,非必要,后面的 \boxed 也是。
效果:
三层兼放入公式中:
\[\boxed{
\sum f=
\caseo{
f\caset{
k\casetz{k\\kk}\\
kkk\casebz{k\\kk\\kkk\\kkkk}
}
\\
ff\caseo{
k\casetz{k\\kk\\kkk}\\
kk\casebz{k\\kk}
}
\\
fff\caseb{
k\casetz{k\\kk\\kkk}\\
kk\casebz{k\\kk\\kkk\\kkkk}
}
}
=\int k
}\]
复制代码
这个例子演示了:最外层及中间用 o ,顶上用 t ,底下用 b ,最后一层节约资源用带 z 的版本。
效果:
至于开头那个数系的图,要打中文当然需要先将导言区第一行改成比如:
\documentclass[UTF8]{ctexart}
\xeCJKsetup{CJKmath=true}
复制代码
这里 CJKmath=true 是允许在公式里直接输入中文,省回打 \text。
然后正文:
复数%
\caseo{
实数\caset{
有理数\caset{
整数\casetz{自然数\\负整数}\\
分数\casebz{真分数\\假分数}
}
\\
无理数\casebz{正无理数\\负无理数}
}
\\
虚数\casebz{纯虚数\\非纯虚数}
}
复制代码
______________________________
完整的测试文件:
case_in_case.tex
(3.61 KB, 下载次数: 64)
2021-8-19 01:28 上传
点击文件名下载附件
(用 XeLaTeX 编译)
About Me
备用链接
回复
举报
kuing
kuing
当前离线
积分
93593
730
主题
1万
回帖
9万
积分
积分
93593
显示全部楼层
发消息
楼主
|
kuing
发表于 2021-8-19 14:21
括号在右边的也弄一个,接着上述导言区,加上
\newcommand\rcase[1]{\left.\begin{aligned}\relax#1\end{aligned}\right\}{}}
\newcommand\rcaseo[1]{\kkkkk{\rcase{#1}}} %补全距,用于外层及中间
\newcommand\rcaset[1]{\smt{\kkkkk{\rcase{#1}}}}%去高度,用于顶上的
\newcommand\rcaseb[1]{\smb{\kkkkk{\rcase{#1}}}}%去深度,用于底下的
\newcommand\rcasetz[1]{\smt{\rcase{#1}}} %最后一层专用(为节约资源)
\newcommand\rcasebz[1]{\smb{\rcase{#1}}} %最后一层专用(为节约资源)
复制代码
用法一样,比如
\fbox{%
\rcaseo{
\rcasetz{k\\kk}k\\
\rcasebz{k\\kk\\kkk\\kkkk}kkk
}%
}
复制代码
得到
左右放一起对比一下是不是对称嘀:
\[\boxed{
\sum f=
\caseo{
f\caset{
k\casetz{k\\kk}\\
kkk\casebz{k\\kk\\kkk\\kkkk}
}
\\
ff\caseo{
k\casetz{k\\kk\\kkk}\\
kk\casebz{k\\kk}
}
\\
fff\caseb{
k\casetz{k\\kk\\kkk}\\
kk\casebz{k\\kk\\kkk\\kkkk}
}
}
=
\rcaseo{
\rcaset{
\rcasetz{k\\kk}k\\
\rcasebz{k\\kk\\kkk\\kkkk}kkk
}f
\\
\rcaseo{
\rcasetz{k\\kk\\kkk}k\\
\rcasebz{k\\kk}kk
}ff
\\
\rcaseb{
\rcasetz{k\\kk\\kkk}k\\
\rcasebz{k\\kk\\kkk\\kkkk}kk
}fff
}
=\int k
}\]
复制代码
回复
举报
kuing
kuing
当前离线
积分
93593
730
主题
1万
回帖
9万
积分
积分
93593
显示全部楼层
发消息
楼主
|
kuing
发表于 2021-8-19 14:54
用 aligned 的好处是可以改变里面东西的对齐方式,比如里面有方程组想在等号对齐之类的。
所以还是有必要再弄一个左边括号的:
\newcommand\lcase[1]{{}\left\{\begin{aligned}\relax#1\end{aligned}\right.}
\newcommand\lcaseo[1]{\kkkkk{\lcase{#1}}} %补全距,用于外层及中间
\newcommand\lcaset[1]{\smt{\kkkkk{\lcase{#1}}}}%去高度,用于顶上的
\newcommand\lcaseb[1]{\smb{\kkkkk{\lcase{#1}}}}%去深度,用于底下的
\newcommand\lcasetz[1]{\smt{\lcase{#1}}} %最后一层专用(为节约资源)
\newcommand\lcasebz[1]{\smb{\lcase{#1}}} %最后一层专用(为节约资源)
复制代码
那么
\fbox{%
\lcaseo{
k&\lcasetz{k&=k\\kk&=kkk}\\
kkk&\lcasebz{k&=k\\kkk&=kk\\kk&=kkk\\kkkk&=k}
}%
}
复制代码
得到
以上的三组命令,可以混用。
回复
举报
isee
isee
当前在线
积分
36159
830
主题
4862
回帖
3万
积分
积分
36159
显示全部楼层
发消息
isee
发表于 2021-8-19 16:39
如果是哪道题用这么括号,那就"伤心"了
回复
举报
kuing
kuing
当前离线
积分
93593
730
主题
1万
回帖
9万
积分
积分
93593
显示全部楼层
发消息
楼主
|
kuing
发表于 2021-8-19 16:54
回复
4#
isee
有这种需求通常都不是题目了,而是讲义或幻灯片什么的……
回复
举报
kuing
kuing
当前离线
积分
93593
730
主题
1万
回帖
9万
积分
积分
93593
显示全部楼层
发消息
楼主
|
kuing
发表于 2023-11-10 15:14
放个链接有空再研究:
zhihu.com/question/625459872/answer/3246081743
About Me
备用链接
回复
举报
返回列表
发新帖
手机版
|
悠闲数学娱乐论坛(第3版)
GMT+8, 2025-3-4 12:36
Powered by
Discuz!
×
快速回复
返回顶部
返回列表