【问题标题】:LyX - breaking long formula linesLyX - 打破长公式线
【发布时间】:2011-02-23 16:35:24
【问题描述】:

如何将 LyX 中的长公式分成两行(或更多行)?我知道如何在一个“数学框”中写出几行方程,但我正在寻找一种解决方案,即使在括号中间也能断行。

我正在使用 LyX 1.6.4,目前,当公式太大时,它不会做任何事情(它只是不打印它的最后一段,即“超出”页面)。

这在 LyX 中可行吗?

【问题讨论】:

  • 我投票结束这个问题,因为它在 tex.stackexchange.com 上更合适
  • @lindelof 这个问题来自 2010 年,在 Tex SE 存在之前。

标签: latex lyx


【解决方案1】:

是的,但你必须手动完成。

退房:

  1. How can I have linebreaks in my long LaTeX equations?
  2. Latex Multiline Equations

Lyx 有一个“插入 -> 数学 -> AMS 多线环境”控件,或者您可以通过使用插入 Latex 控件直接输入 Latex 来使用上面推荐的解决方案。

关于 breqn 的说明

Michael Downes 使用这个包完成了一些非凡的 Tex 编码,但它对于一般用途来说不够健壮 - 它与 Amsmath 大多不兼容,例如,以难以理解的方式中断,并产生一些明显不合理的换行符在公式中。

显示公式中的自动换行被列为one of the top open research problems in Tex

【讨论】:

  • AMS Multiline 环境有效,但不在括号中间,括号中包含了我的大部分方程式。有没有这样的解决方案?
  • @Amir:使用“Insert -> TeX Code”(Alt-L)直接插入 Latex 代码块。
  • @Amir:如果你的意思是 '\left('-type self-sizing 括号,那么你不能真正将它们与 'multline' 一起使用。在换行之前用 '\right.' 关闭 (并使用 '\left.') 重新打开,这会导致括号大小不同,或者使用 '\big('、'\Big('、'\Bigg(' 等)自行调整大小。
  • @Aniko @Charles Stewart 谢谢,这正是我所需要的!
【解决方案2】:

如果您在 LyX “LaTeX Preamble”(加上以下代码)中包含 \usepackage{breqn},则标准“方程式”环境(显示公式)将自动中断。

% Add support for automatic equation breaking
\gdef\wrap@breqn@environ#1#2{
    \expandafter\let\csname breqn@oldbegin@#1\expandafter\endcsname\csname #1\endcsname
    \expandafter\let\csname breqn@oldend@#1\expandafter\endcsname\csname end#1\endcsname
    \expandafter\gdef\csname breqn@begin@#1\endcsname{%
        \expandafter\let\csname #1\expandafter\endcsname\csname breqn@oldbegin@#1\endcsname%
        \begin{#2}%
    }
    \expandafter\gdef\csname breqn@end@#1\endcsname{%
        \expandafter\let\csname end#1\expandafter\endcsname\csname breqn@oldend@#1\endcsname%
        \end{#2}%
        \expandafter\let\csname #1\expandafter\endcsname\csname breqn@begin@#1\endcsname%
        \expandafter\let\csname end#1\expandafter\endcsname\csname breqn@end@#1\endcsname%
    }
    \expandafter\let\csname #1\expandafter\endcsname\csname breqn@begin@#1\endcsname
    \expandafter\let\csname end#1\expandafter\endcsname\csname breqn@end@#1\endcsname
}
\wrap@breqn@environ{equation}{dmath}
\wrap@breqn@environ{equation*}{dmath*}

于 2016 年 12 月 8 日添加:

如果您希望覆盖默认的(未编号的)LyX 方程式环境,那么还可以添加以下内容:

\DeclareRobustCommand\[{\begin{equation*}}
\DeclareRobustCommand\]{\end{equation*}}

【讨论】:

  • 我刚刚在 Lyx 中尝试过,但它没有做任何事情......行仍然超出右边距。
  • @DmitriNesteruk:LyX 使用 [ 和 ] 来开始和结束数学环境,您必须在末尾添加以下内容:\global\let\[=\equation\global\let\]=\endequation
  • @roi.holtzman 您是否包含了包裹? (\usepackage{breqn})
  • @roi.holtzman 抱歉,我花了一段时间才回复您,天哪,您对宏玩得开心吗。您有两个问题:1)您已经覆盖了 LaTeX 命令\sp,因为 breqn 使用该命令,您需要为您的命令选择另一个名称,2)您在“在此工作”之前有一个裸回车,您将需要删除它才能编译文档。 wrt 到 #1,您可以修改您的文档以将 \sp 替换为 \spacer(在 Linux/Mac 上),如下所示:sed 's|\\sp\([\ -}\\]\)|\\spacer\1|g' tmp.lyx > new.lyx(将 tmp.lyx 替换为文件名)
  • @roi.holtzman 这是可能的,但并不容易。 LyX 多线方程使用不同的环境 (align*),它不容易转化为 breqn 使用的方案。我会研究一下,但可能需要一段时间才能弄清楚如何从 align 环境中翻译命令。
【解决方案3】:

您可能想尝试breqn 包。它为大公式提供自动换行。这样就无需手动修复分隔符或选择断点。当然,这不是真正的 LyX 功能,但它完全符合您的要求。

【讨论】:

  • 由于某种原因 MikTeX 无法自动安装它。我从你的链接下载的 dtx 文件怎么办?
  • @Amir README 和实际的 .dtx 文件中都提供了安装指南,这些可能是一个好的开始 :)。顺便说一句,我的 MikTeX 正确安装了 mh 捆绑包,因此无需手动安装应该是可能的。
  • 安装它,将\usepackage{breqn} 添加到乳胶序言中,它没有做任何事情。如果需要在文档中使用任何特殊命令,我从文档中没有理解。
  • @Amir 您必须将 LyX 用于您的数学环境替换为 dmath 环境。并确保正确使用分隔符和运算符。
【解决方案4】:

插入 -> 数学-> AMS 多行环境

写下你的方程,然后在你想分割的地方点击“Ctrl+Enter” 然后右键单击公式并选择数字整数公式

【讨论】:

    【解决方案5】:

    最近我不得不处理同样的问题。我的简单解决方案(不知道是否最好)是对多行使用 ctrl+enter,对于括号问题,您可以在括号、括号和大括号之后使用按钮,这将打开一个包含这些和许多其他内容的窗口选项,重要的是,同时有不同选择的选项,(像这样}。特别是,你可以选择“无”,每行只有“(”或“)”, (喜欢 +/这个) 希望对您有所帮助。

    【讨论】:

      【解决方案6】:

      我“打破 lyx 中的长公式行”的方式是按需使用 breqn。该方法在这篇文章中进行了演示。

      在 LyX "LaTeX Preamble" 中加入以下内容

      \usepackage{amsmath}
      \usepackage{etoolbox} 
      \usepackage{breqn}
      
      \newcommand{\breqnoverloadothers}
      {% 
          \renewenvironment{equation}{\ignorespaces\begin{dmath}}{\end{dmath}\ignorespacesafterend}%
          \renewenvironment{equation*}{\ignorespaces\begin{dmath*}}{\end{dmath*}\ignorespacesafterend}%
          \renewenvironment{multline}{\ignorespaces\begin{dmath}}{\end{dmath}\ignorespacesafterend}%
          \renewenvironment{multline*}{\ignorespaces\begin{dmath*}}{\end{dmath*}\ignorespacesafterend}%
      
      }
      
      \newcommand\breqnundefineothers
      {%  
          \renewenvironment{equation}{}{}%
          \renewenvironment{equation*}{}{}%
          \renewenvironment{multline}{}{}%
          \renewenvironment{multline*}{}{}%
      
      }
      
      \AtBeginEnvironment{dmath}{\breqnundefineothers}
      \AtBeginEnvironment{dmath*}{\breqnundefineothers}
      
      \AtBeginEnvironment{dgroup}{\def\breqnundefineothers{}\breqnoverloadothers}
      \AtBeginEnvironment{dgroup*}{\def\breqnundefineothers{}\breqnoverloadothers}
      

      在 Lyx 中,对于要应用 breqn 的长方程,只需 1) 使用上面已重载的任何数学环境(即方程/方程*/multline/multline*)排版方程,以及 2) 环绕使用 dmath 环境或 dgroup 环境的方程,例如:

      \begin{dmath}
          hit ctrl+shift+M to insert a long equation here, and number the equation
      \end{dmath} 
      

      \begin{dgroup}
          hit ctrl+shift+M to insert a long equation here, and number the equation
          hit ctrl+shift+M again to insert another long equation here, and number the equation
      \end{dgroup} 
      

      现在您可以导出为 PDF 并看到长方程由 breqn “自动”处理。未包含在 dmath 或 dgroup 中的方程不会受到影响。

      已生成屏幕截图,但我没有上传它们的 10 分声誉。

      【讨论】:

        【解决方案7】:

        我知道这有点老了,但有人可能仍然需要这些信息,就像我不久前一样。 我最近遇到了类似的问题,中间打断了一条编号线。 (lyx 2.04 及更高版本)。 我使用了 lyx eqn 数组。 把方程,全部放到eqn数组右边的盒子里(有两个) 在要打破等式的位置,按 CTRL+Enter。 这会将您的方程式分成两行。 如果您有一个编号的方程数组,请使用以下命令切换上面的行: Alt+M Shift+N 删除方程编号,两行只剩下一个方程。

        【讨论】:

          猜你喜欢
          • 2020-07-19
          • 1970-01-01
          • 1970-01-01
          • 2023-03-11
          • 1970-01-01
          • 2011-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多