![在内联数学表达式中换行后重复某些符号](https://linux22.com/image/329103/%E5%9C%A8%E5%86%85%E8%81%94%E6%95%B0%E5%AD%A6%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E6%8D%A2%E8%A1%8C%E5%90%8E%E9%87%8D%E5%A4%8D%E6%9F%90%E4%BA%9B%E7%AC%A6%E5%8F%B7.png)
我使用 LaTeX 来输入我的大学数学笔记。在其中,我经常发现自己面临内联数学表达式中的换行符。在这种情况下,我通常想在换行符之前将符号复制两遍,将一个副本放在行尾,将另一个副本放在下一行的开头。不幸的是,TeX 不会这样做。到目前为止,我让它手动执行此操作(例如$d=$ $=\dim M$
,$f:M\to$ $\to\mathbb{R}$
甚至$x\mapsto$ \linebreak $\mapsto(x,f(x))$
,因为有时 TeX 会在第二次复制后换行)。检查文档中所有此类换行符非常无聊,因此我想知道是否有办法告诉 TeX 自动执行此操作。理想的做法是使用宏\doubleatbreaks
,其语法\doubleatbreaks{<sign>}
确保<sign>
在内联数学的换行符处将 复制两遍。例如,在换行符处\doubleatbreaks{=}
将=
s 复制两遍,在换行符处\doubleatbreaks{\times}
将 复制\times
两遍,等等。有办法做到这一点吗?
编辑
正如 @egreg 所说,rmathbr
这是方法。只有一件事:当我在换行符处有一个减号时,我通常会在新行上加一个加号,因为 -+=- 和 --=+。rmathbr
将 - 翻倍。我怎样才能得到 - (换行符) +?
答案1
完成此操作的几个步骤:
- 去加拿大运输安全局;
- 寻找包裹
rmathbr
; - 下载它;
- 找到下载的文件;
- 打开
rmathbr.ins
; - 排版(即编译);
- 这会产生一个
.sty
;找到它并将其放置在 TeX 可以找到它的目录中; - 添加
\usepackage{rmathbr}
到您的文档的序言中。
这会导致很多符号重复。打开.sty
现在也会打开.pdf
文档的。该包似乎存在一些已知问题,文档说应该加载在其他包裹之后。
如果有人像我一样想用加号分隔减号(即$a-$ $+b$
在中间加一个换行符),因为 -+=- 和 --=+,我侵入了该包的代码并生成了这个:
\makeatletter
\begingroup
\catcode`\-\active
\ifnum\mathcode`\-<32768
\xdef-{\noexpand\xbrokenbin{\mathchar\number\mathcode`\-}}
\else
\gdef-{\xbrokenbin{\mathchar8704}}
\fi
\endgroup
\DeclareRobustCommand{\xbrokenbin}[1]{\rmathbr@xbrokenbin{#1}}
\def\rmathbr@xbrokenbin#1%
{
\relax
\def\rmathbr@arg{#1}
\def\rmathbr@this{\rmathbr@xbrokenbin}
\def\rmathbr@output{\rmathbr@@xbrokenbin}
\futurelet\rmathbr@let@token\rmathbr@brokenop%
}
\def\rmathbr@@xbrokenbin#1%
{
\ifnum\lastpenalty=\relpenalty
\mathbin{#1}
\else
\mathbin{#1}
\ifx$\rmathbr@let@token
\else
\rmathbr@selector{+}
\fi
\fi
\rmathbr@setbrokens
\penalty\binoppenalty %
}
\def\rmathbr@selector#1%
{
\mathchoice
{\discretionary{}{\hbox{$\m@th\displaystyle#1$}}{}}
{\discretionary{}{\hbox{$\m@th\textstyle#1$}}{}}
{\discretionary{}{\hbox{$\m@th\scriptstyle#1$}}{}}
{\discretionary{}{\hbox{$\m@th\scriptscriptstyle#1$}}{}}%
}
\makeatother
我创建了一个包含上述代码的文件handleminus.tex
,并得到了以下非常简单的 MWE:
\documentclass[a4paper]{report}
\usepackage{amsmath,rmathbr}
\input handleminus.tex
\begin{document}
Foobar Foobar Baz Baz Tom Dick Harry Tizio Caio Sempronio sorrata $d=\dim M$. wojgaoperjgojefgiwejafoiwjofipjaweoifjwaeoifjowipjfowiepjf pqppp $a\times b$ qoifjoqiwjfoiwqjfoiqwjfoiqwjfoiqwjfoiwqjfo qpogkpoqwkgpoqwkpowq pqi $a-b$
\end{document}
编译为:
当然,请记住,在\input
加载包之后,否则上面的代码将被包的代码覆盖,并且您将重复返回减号。
感谢 egreg 指出该包。
稍微努力一下,肯定可以制作一个版本,\xbrokenbin
它接受两个参数并创建一个命令,该命令打印第一个参数,换行,然后给出第二个参数,即\xbrokenbin{-}{+}
给出上述代码产生的结果。但是,我不需要这样的扭曲,所以我不会花时间去做。另外,我不鼓励这样的扭曲:像\subseteq
这样重复\cdot
会很奇怪。