如何向 LyX 添加具有自定义外观和 LaTeX 代码的数学命令?我知道这可以实现自定义引用命令和字符样式,所以这对于数学命令来说也是可能的!
编辑:实际上,array
人们确实可以通过 GUI 方式改变 LyX 中的对齐方式此外,我了解到,这array
是做我在下面的“背景”中描述的事情的一个坏方法,我应该用alignat
。但是,我认为这个问题仍然很重要,因为在某些情况下,人们可能希望包含自己的命令……例如array
带有>{\cmd}l
样式的对齐说明符,目前无法在 GUI 中输入。
背景:
我想排版一个常微分方程组,其中相似的项位于同一列,左对齐。我无法在 LyX 中做到这一点,因为我知道的所有数学环境都将其内容居中对齐。
使用 LyX 函数我能想到的最好的方法是打开一个数学方程式(Ctrl- Shift- M),然后键入\array
,然后按空格键,这样就会打开一个类似表格的环境,我可以在其中输入数学运算:
但是,我无法像在数学环境之外创建表时那样更改列的对齐方式。这会导致如下代码:
\documentclass{article} % Added for MWE
\begin{document} % Added for MWE
\newcommand\d{\mathrm{d}} % Added for MWE
\[
\begin{array}{ccc}
\frac{\d V}{\d t} & =-\delta_{V} & -k_{inf}\cdot C\cdot V\\
\frac{\d C}{\d t} & =\lambda-\delta_{C} & -k_{inf}\cdot C\cdot V
\end{array}
\]
\end{document} % Added for MWE
看起来像这样:
我的问题是:我还不能改变环境{ccc}
的一部分array
。
我想继续使用 LyX,因为预览功能可以让我免于重复编译文档,这需要相当长的时间。
到目前为止我能想到的最好的办法就是将原始 LaTeX 代码嵌入“预览”框中(代码与上面的相同,除了lll
):
因此,最好的方法是在 LyX 中定义一个命令,该命令看起来像array
LyX 窗口中的命令,并调用自定义环境。这使用我在宏中预先定义的正确对齐方式:
% Defined in LyX preamble
\newenvironment{myarray}{\begin{array}{\al}}{\end{array}}
% Defined as Evil Red Text (ERT) before Equation
\newcommand\al{llll}
% Created by LyX with the same appearance as if I had typed
% \array in LyX math mode
\[
\begin{myarray}
\frac{\d V}{\d t} & =-\delta_{V} & -k_{inf}\cdot C\cdot V\\
\frac{\d C}{\d t} & =\lambda-\delta_{C} & -k_{inf}\cdot C\cdot V
\end{myarray}
\]
答案1
当然,您可以更改 的列说明符array
。在++Ctrl之后,单击ShiftM按钮。这将显示如下所示的对话框:
您可以在此处设置行数和列数,并在底部的文本字段中定义列说明符。
要更改现有列,请将光标放在列中,然后转到编辑 --> 行和列。该子菜单中的前三个条目用于左对齐、居中对齐和右对齐。它们也有键盘快捷键:
- 左:Alt+MCL
- 中心:Alt+MCM
- 右:Alt+MCR
如果你真的想
你也可以得到更好的结果array
,尽管我不得不承认使用 GUI 在 LyX 中执行此操作有点麻烦。除非我错过了什么,否则我从来不用 LyX(除了在这里回答问题)。
为此,我宁愿将整个内容写在 ERT 中。或者使用alignat
Bernard 提到的方法,它可以通过插入 --> 数学 --> AMS alignat 直接使用。
但无论如何,如果你喜欢痛苦,请先进入文档 --> 设置 --> LaTeX 序言,然后添加
\usepackage{array}
\newcommand\diff{\mathop{}\!\mathrm{d}} % courtesy of egreg
该array
包允许您使用例如在列中每个单元格的开头>{stuff}
插入。该宏用于排版差分 d,如果您不想让它直立,请删除。或者根本不要使用它。stuff
\diff
\mathrm
在您的文档中,添加显示方程并打开数组对话框,如本答案最顶部所述。在指定列的字段中,写入
l@{}>{{}}l@{}>{{}}l
这将删除列之间的空格,并在第二列和第三列的开头添加一个空组。空组的目的是为了在等号和减号周围获得正确的空间。但是不要在这个字符串中添加任何空格,这似乎会使其恢复为c
列。
然后按照在代码中所做的那样填写数组,在第一个单元格中填写分数,在第二个单元格中填写=
和项,在第三个单元格中填写项。\delta
k_{\mathrm{inf}}
一些说明:
我使用显示分数而不是标准分数:
要使用
\diff
宏,只需输入\diff
。有一个字体按钮位于数学工具栏上分数按钮的右侧(上图),您可以使用
\mathrm{inf}
它来输入下标k
。它是字母 A 的四倍。您需要对 进行一些垂直拉伸
array
,因此将光标放在 之前array
,但是里面数学环境,并写下\renewcommand\arraystretch{2.5}
2.5
可能不是理想的,因此请根据您的喜好进行调整。
所有这些的结果是:
这是.lyx
生成上述屏幕截图的完整文件。
#LyX 2.2 created this file. For more info see http://www.lyx.org/
\lyxformat 508
\begin_document
\begin_header
\save_transient_properties true
\origin unavailable
\textclass article
\begin_preamble
\usepackage{array}
\newcommand\diff{\mathop{}\!\mathrm{d}} % courtesy of egreg
\end_preamble
\use_default_options true
\maintain_unincluded_children false
\language english
\language_package default
\inputencoding auto
\fontencoding global
\font_roman "default" "default"
\font_sans "default" "default"
\font_typewriter "default" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize default
\use_geometry false
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 1
\use_package mathdots 1
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 1
\index Index
\shortcut idx
\color #008000
\end_index
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header
\begin_body
\begin_layout Standard
\begin_inset Formula
\[
\renewcommand\arraystretch{2.5}\begin{array}{l@{}>{{}}l@{}>{{}}l}
\dfrac{\diff V}{\diff t} & =-\delta_{V} & -k_{\mathrm{inf}}\cdot C\cdot\\
\dfrac{\diff C}{\diff t} & =\lambda-\delta_{C} & -k_{\mathrm{inf}}\cdot C\cdot V
\end{array}
\]
\end_inset
\end_layout
\end_body
\end_document
答案2
间距不太好。我认为您需要的是环境alignat*
,有两列(因此是 3 &
)。此外,您可以使用包节省大量输入esdiff
。此外,inf
应该直立输入,而不是像三个变量那样i, n, f
。有一个\inf
命令可以做到这一点。我不知道如何使用 LyX 获得所有这些,但代码应该是这样的:
\documentclass{article} % Added for MWE
\usepackage{mathtools}
\usepackage{esdiff} %
\begin{document} % Added for MWE
\begin{alignat*}{2}
\diff{V}{t} & ={} &-\delta_{V} & -k_{\inf}\cdot C\cdot V \\
\diff{C}{t} & = {}& \lambda-\delta_{C}& -k_{\inf}\cdot C\cdot V
\end{alignat*}
\end{document}