免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
Board logo

标题: 如何使小括号自动使用\left\right? [打印本页]

作者: abababa    时间: 2018-5-12 15:51     标题: 如何使小括号自动使用\left\right?

之前用的代码是
  1. \def\lparen{(}
  2. \def\rparen{)}
  3. \catcode`(=\active
  4. \catcode`)=\active
  5. \def({\ifmmode\left\lparen\else\lparen\fi}
  6. \def){\ifmmode\right\rparen\else\rparen\fi}
复制代码
但是现在重新安装了一下系统和texlive,发现用ifmmode不行了,改成ifinner是可以的,但这样行间公式就没自动用到\left\right。请教这个应该怎么改才行?
作者: kuing    时间: 2018-5-12 16:47

我懒得更新,所以没报错,没法帮你测试咯……

PS、这种更改具有危险性,慎用啊……(这类操作我只试过用来切换一些中文标点符号,其他地方都没用过)
作者: abababa    时间: 2018-5-12 19:47

本帖最后由 abababa 于 2018-5-12 20:04 编辑

回复 2# kuing

刚才又试了一下ifmmode,发现就是下面这个不行:
  1. \[\begin{bmatrix}
  2. (p-a)^2 & (p-b)^2 & (p-c)^2
  3. \end{bmatrix}\]
复制代码
哦,原来bmatrix,align,cases这些都不行,不知道为什么。
作者: kuing    时间: 2018-5-12 20:46

回复 3# abababa

那就是和版本无关了,因为加了这段之后,我这里也报错了。

所以说嘛,还是不要随便改底层和常用的东西……
作者: abababa    时间: 2018-5-12 20:52

回复 4# kuing

不过我这里之前都是可以用的,之前那些tex文件都能编译,就是这次重装之后,都不行了。上次的版本是texlive2015的好像。
作者: kuing    时间: 2018-5-13 01:57

无意中发现用 { } 括住之后竟然就可以通过……完全不理解……
而且 align 只需括住 & 的左边,右边不用,太奇怪鸟……
\(
\documentclass{article}
\usepackage{amsmath}
\def\lparen{(}
\def\rparen{)}
\catcode`(=\active
\catcode`)=\active
\def({\ifmmode\left\lparen\else\lparen\fi}
\def){\ifmmode\right\rparen\else\rparen\fi}
\begin{document}
($\dfrac12$), $(\dfrac12)^2$
\[\begin{bmatrix}
{(\dfrac12)^2} & {(\dfrac12)^2} & {(\dfrac12)^2}\\
{(\dfrac12)^2} & {(\dfrac12)^2} & {(\dfrac12)^2}
\end{bmatrix}\]
\begin{align}
{(\frac12)^2}&=(\frac12)^2+(\frac12)^2\\
{(\frac12)^2}&=(\frac12)^2+(\frac12)^2
\end{align}
\[f(x)=\begin{cases}
{(\dfrac12)^2}&{(\dfrac12)^2}\\
{(\dfrac12)^2}&{(\dfrac12)^2}
\end{cases}\]
\end{document}
\)
作者: kuing    时间: 2018-5-13 02:14

既然加 { } 是有用的,那么干脆就在定义里添加好了,试了下果然可行,不过也不知有没有其他副作用……
靠蒙竟然也能解决,俺的运气看来还是阔以嘀
\(
\documentclass{article}
\usepackage{amsmath}
\def\lparen{(}
\def\rparen{)}
\catcode`(=\active
\catcode`)=\active
\def({\begingroup\ifmmode\left\lparen\else\lparen\fi}
\def){\ifmmode\right\rparen\else\rparen\fi\endgroup}
\begin{document}
($\dfrac12$), $(\dfrac12)^2$
\[\begin{bmatrix}
(\dfrac12)^2 & (\dfrac12)^2 & (\dfrac12)^2\\
(\dfrac12)^2 & (\dfrac12)^2 & (\dfrac12)^2
\end{bmatrix}\]
\begin{align}
(\frac12)^2&=(\frac12)^2+(\frac12)^2\\
(\frac12)^2&=(\frac12)^2+(\frac12)^2
\end{align}
\[f(x)=\begin{cases}
(\dfrac12)^2&(\dfrac12)^2\\
(\dfrac12)^2&(\dfrac12)^2
\end{cases}\]
\end{document}
\)
作者: abababa    时间: 2018-5-13 09:06

回复 7# kuing

谢谢,这个没有中文的是可以的。不过这样和下面的
\usepackage[slantfont,boldfont]{xeCJK}
是冲突的。
在网上也找到一个方案:
https://tex.stackexchange.com/qu ... -for-left-and-right
不过都试了,也没能完全解决目前的情况。但是升级之前都是可以用的。
唉,之前用的包太多了,不知道哪个就有冲突,最关键的是我现在都记不清那些包当初是用来干什么的觉得latex应该在编译时就告诉哪些包会有冲突,而不是最后给出一个具体的哪行有错误。
作者: isee    时间: 2018-5-13 11:00

嘿嘿最核心的底层代码从不动(也不会动)。。。。。。没这种痛苦。。。
作者: kuing    时间: 2018-5-13 12:03

回复 8# abababa

还是不要这样搞了,事实上很多地方本身也不应该用 left right。
至于宏包多到记不清,那只能怪你自己当初太懒(我记得你加宏包都是全部放在一个 \usepackage 里的是吧?)
作者: abababa    时间: 2018-5-13 12:17

本帖最后由 abababa 于 2018-5-13 12:23 编辑

回复 10# kuing

是的,没参数的都放在一个usepackage里了
我之前弄了一些求偏导,还有积分号、$\sum$号的那些公式,因为很多,觉得小括号没能适应高度,就一直想让它自动适应,费了很大力气才弄好,结果一升级全不行了。
像$(\frac{n+1}{n})^n$,$\iint_{D}(\frac{\partial }{\partial x}-\frac{\partial }{\partial y})dxdy$这样的应该用\left\right吗?还有这种的:
\[\sum_{n=0}^{\infty}(a_n\int_{0}^{A}x^ne^{-x}dx)\]
作者: kuing    时间: 2018-5-13 14:50

回复 11# abababa

这些应该用。

什么时候不应该用,可以看以下例子:
\(
\documentclass{article}
\usepackage[showframe,paperwidth=5.85cm]{geometry}
\begin{document}

xxxxxxxxxxxx $a+\left(b+c\right)$

xxxxxxxxxxxx $a+(b+c)$

xxxxxxxxxxx $a+\left(b+c\right)$

xxxxxxxxxxx $a+(b+c)$

$f(x)g(x)$\par
$f\left(x\right)g\left(x\right)$
\[
f(\sqrt2x)+f\left(\sqrt2x\right)
\]

\end{document}
\)
效果:
leftright.png
2018-5-13 14:45


关于前四行,因为处理 \left( ... \right) 时,是要先排版里面的东西,知道高度之后再决定用多大的括号,所以它总是一个整体,不能断行,也不参与间距压缩。
从第五、六行看出,有时 \left( ... \right) 会在两边产生多余的间距。
最后一行 \left( ... \right) 所选的括号太大,当然这与个人审美有关,像这种情况通常我会用 \bigl(\sqrt2x\bigr),大小介于图中的两者之间:`\displaystyle f(\sqrt2x)+f\bigl(\sqrt2x\bigr)+f\left(\sqrt2x\right)`

还有 texbook 里给的例子:
\left|\left|x\right|-\left|y\right|\right| 只能得到 `\left|\left|x\right|-\left|y\right|\right|`
这里也应该用 \big 来使外层的绝对值大一点,即 `\bigl||x|-|y|\bigr|`

至于和式:
捕获.PNG
2018-5-13 17:51

texbook 里也不建议用 left right,这个我倒觉得无所谓,反正这也都是个人喜好的问题了。

图片附件: leftright.png (2018-5-13 14:45, 24.46 KB) / 下载次数 4
http://kuing.orzweb.net/attachment.php?aid=6200&k=eb14f04c6e229927322e964cad6111bf&t=1539815024&sid=uF77fE



图片附件: 捕获.PNG (2018-5-13 17:51, 14.08 KB) / 下载次数 1
http://kuing.orzweb.net/attachment.php?aid=6201&k=f62164fb533df6a2b410fb6a4d087d81&t=1539815024&sid=uF77fE


作者: abababa    时间: 2018-5-13 19:32

回复 12# kuing

之前就是那些求和、积分、大分数等等用得太多了,总打\left\right嫌麻烦,然后上网一找括号自动适应高度,就用上了,心想这回可好了。这次升级,取消了自动适应高度,根本找不到之前哪些地方应该用\left\right。
不过latex怎么不弄成自动适应高度的呢?像那个求和的,先计算里面的高度,然后上下各减去一点就可以了,就和\biggl一样了。如果发现只有一边括号,不能配对,就放弃适应。觉得这样更方便一些。网上还提到了nath包,不过也只能适应一层,多层的还是不行。
作者: kuing    时间: 2018-5-14 01:41

回复 13# abababa

可能为了效率吧,因为实际当中需要 left right 的地方也没有那么多吧,当然这跟你在排什么有关,而按我的经验就觉得不多,拿撸题集随便看了几页,所在括号中用上 left right 的也就两三成。
如果全都自动适应,除了浪费资源降低效率,还会出现我上面说的那些问题,而要同时解决那些问题的话,内部的处理就要设计得更复杂,进一步降低效率,而且还不知会不会在我们想不到的地方带来麻烦哩。
所以作为程序的基础,不弄全自动是可以理解嘀,反正还可以在其上开发宏包来搞啊。




欢迎光临 悠闲数学娱乐论坛(第2版) (http://kuing.orzweb.net/) Powered by Discuz! 7.2