找回密码
 快速注册
搜索
查看: 1224|回复: 5

行内公式的可换行 left right 尝试

[复制链接]

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2020-10-17 15:12 |阅读模式
代码及测试:
\documentclass{article}
\usepackage[papersize={12cm,9cm},margin=2cm]{geometry}

\makeatletter
\newdimen\Ht
\newcommand\khhlr[4]{% khhlr = 可换行 left right
\setbox0=\hbox{$\m@th#3#4$}\Ht=\ht0\advance\Ht by\dp0%
\mathopen{\hbox{$\left#1\rule[-\dp0]{0pt}{\Ht}\right.\n@space$}}%参考了 source2e
#4%
\mathclose{\hbox{$\left.\rule[-\dp0]{0pt}{\Ht}\right#2\n@space$}}%
}
\newcommand\khh[2]{\mathpalette{\khhlr#1#2}}
\makeatother

\newcommand\khhp{\khh()}
\newcommand\khhb{\khh[]}
\newcommand\khhB{\khh\{\}}
\newcommand\khhv{\khh||}

\begin{document}

$\khhp{x}+\khhb{x^2}+\khhB{\frac12}+\khhv{\sum}+\khh[){0,\sqrt{\sum}}$

\[\khhp{x}+\khhb{x^2}+\khhB{\frac12}+\khhv{\sum}+\khh[){0,\sqrt{\sum}}\]

text text text text text text $\displaystyle\khhB{\frac12+\frac12+\frac12+\frac12+\frac12+\frac12}$
text text text text text text $\displaystyle\khh(]{\frac12+\frac12+\frac12+\frac12+\frac12+\frac12}$

\end{document}
效果:
QQ截图20201017151049.png

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 2020-10-17 15:43
原理其实很简单,就是先将内容存入 box0 里,然后获取它的高度深度,据此分别打出左括号、内容、右括号,它们不是一个整体,所以在行内的时候就能够自动换行(注意不是人工换行,\\ 是无效的)。
其实 big, Big 之类也是一样道理,只不过那些是固定的括号,而我所多做的就是获取内容的高度信息来确定括号。
既然如此,那为啥 latex 的设计者没弄这样的东东?难道有啥副作用,又或者这种做法有点浪费资源?我不清楚……

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2020-10-17 16:55
回复 1# kuing

谢谢,这个已经解决了我刚才发那帖的问题。

我刚才编译了一下,有些地方感觉还是没有正确换行,比如这个:
  1. \begin{theorem}[拉格朗日中值定理]
  2. 设函数$f(x)$是区间$[a,b]$上的连续函数,集合$S = \myset{x \in [a,b]: \text{在$x \in (a,b)$使得$f(x)$可导}}$.
  3. \end{theorem}
复制代码

定理.png

这个如果改成:“$f(x)$是定义在区间$[a,b]$上的连续函数”,加了几个字,它还是从冒号那里折行,而如果少几个字,这一行的字间距感觉就有点拉开了。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 2020-10-17 17:03
回复 3# abababa
这是因为你的 \text{在 ... 可导} 把这句话变成一个整体了,它就无法在这里分开。
改成这样试试
\begin{theorem}[拉格朗日中值定理] 
设函数$f(x)$是区间$[a,b]$上的连续函数,集合$S = 
\myset{x \in [a,b]: \text{在}~x \in (a,b)~\text{使得}~f(x)~\text{可导}}$. 
\end{theorem}

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

 楼主| kuing 发表于 2020-10-17 17:08
回复 4# kuing

其实我也不知道公式里的 ~ 会是咋处理,如果不行的话,把 ~ 改成 \空格 再试

不过就算 ~ 或 \空格 都不能换行,至少在 \in 那里可以换

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2020-10-17 17:13
回复 4# kuing

原来如此,原来是text弄的没有换行。
觉得这种公式里又有汉字又有公式的挺麻烦,就用text括起来,然后里面再打上公式,一次就成了,不用那么多text,不知道正规的做法是不是这样。

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 11:58

Powered by Discuz!

× 快速回复 返回顶部 返回列表