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

如何使小括号自动使用\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。请教这个应该怎么改才行?
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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

PS、这种更改具有危险性,慎用啊……(这类操作我只试过用来切换一些中文标点符号,其他地方都没用过)

TOP

本帖最后由 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这些都不行,不知道为什么。

TOP

回复 3# abababa

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

所以说嘛,还是不要随便改底层和常用的东西……

TOP

回复 4# kuing

不过我这里之前都是可以用的,之前那些tex文件都能编译,就是这次重装之后,都不行了。上次的版本是texlive2015的好像。

TOP

无意中发现用 { } 括住之后竟然就可以通过……完全不理解……
而且 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}
\)

TOP

既然加 { } 是有用的,那么干脆就在定义里添加好了,试了下果然可行,不过也不知有没有其他副作用……
靠蒙竟然也能解决,俺的运气看来还是阔以嘀
\(
\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}
\)
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

回复 7# kuing

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

TOP

嘿嘿最核心的底层代码从不动(也不会动)。。。。。。没这种痛苦。。。

TOP

回复 8# abababa

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

TOP

本帖最后由 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)\]

TOP

回复 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,这个我倒觉得无所谓,反正这也都是个人喜好的问题了。
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

回复 12# kuing

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

TOP

回复 13# abababa

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

TOP

返回列表 回复 发帖