悠闲数学娱乐论坛(第2版)'s Archiver

abababa 发表于 2018-5-12 15:51

如何使小括号自动使用\left\right?

之前用的代码是[code]\def\lparen{(}
\def\rparen{)}
\catcode`(=\active
\catcode`)=\active
\def({\ifmmode\left\lparen\else\lparen\fi}
\def){\ifmmode\right\rparen\else\rparen\fi}[/code]但是现在重新安装了一下系统和texlive,发现用ifmmode不行了,改成ifinner是可以的,但这样行间公式就没自动用到\left\right。请教这个应该怎么改才行?

kuing 发表于 2018-5-12 16:47

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

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

abababa 发表于 2018-5-12 19:47

[i=s] 本帖最后由 abababa 于 2018-5-12 20:04 编辑 [/i]

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26568&ptid=5353]2#[/url] [i]kuing[/i] [/b]

刚才又试了一下ifmmode,发现就是下面这个不行:[code]
\[\begin{bmatrix}
(p-a)^2 & (p-b)^2 & (p-c)^2
\end{bmatrix}\]
[/code]哦,原来bmatrix,align,cases这些都不行,不知道为什么。

kuing 发表于 2018-5-12 20:46

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26572&ptid=5353]3#[/url] [i]abababa[/i] [/b]

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

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

abababa 发表于 2018-5-12 20:52

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26574&ptid=5353]4#[/url] [i]kuing[/i] [/b]

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

kuing 发表于 2018-5-13 01:57

无意中发现用 { } 括住之后竟然就可以通过……完全不理解……{:sweat:}
而且 align 只需括住 & 的左边,右边不用,太奇怪鸟……{:sweat:}[code]\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} [/code]

kuing 发表于 2018-5-13 02:14

既然加 { } 是有用的,那么干脆就在定义里添加好了,试了下果然可行,不过也不知有没有其他副作用……[img]http://kuing.orzweb.net/attachments/month_1309/1309021709ffeceada9c772806.gif[/img]
靠蒙竟然也能解决,俺的运气看来还是阔以嘀{:victory:}[code]\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} [/code]

abababa 发表于 2018-5-13 09:06

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26581&ptid=5353]7#[/url] [i]kuing[/i] [/b]

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

isee 发表于 2018-5-13 11:00

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

kuing 发表于 2018-5-13 12:03

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26583&ptid=5353]8#[/url] [i]abababa[/i] [/b]

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

abababa 发表于 2018-5-13 12:17

[i=s] 本帖最后由 abababa 于 2018-5-13 12:23 编辑 [/i]

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26589&ptid=5353]10#[/url] [i]kuing[/i] [/b]

是的,没参数的都放在一个usepackage里了{:sweat:}
我之前弄了一些求偏导,还有积分号、$\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

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26590&ptid=5353]11#[/url] [i]abababa[/i] [/b]

这些应该用。

什么时候不应该用,可以看以下例子:[code]\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} [/code]效果:
[attach]6200[/attach]

关于前四行,因为处理 \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|`

至于和式:
[attach]6201[/attach]
texbook 里也不建议用 left right,这个我倒觉得无所谓,反正这也都是个人喜好的问题了。

abababa 发表于 2018-5-13 19:32

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26592&ptid=5353]12#[/url] [i]kuing[/i] [/b]

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

kuing 发表于 2018-5-14 01:41

[b]回复 [url=http://kuing.orzweb.net/redirect.php?goto=findpost&pid=26595&ptid=5353]13#[/url] [i]abababa[/i] [/b]

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

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.