当我尝试编译要使用环境的 LaTeX 文件时begin{align*}
,我不断收到错误:
! Missing } inserted.
<inserted text>
}
1.164 \end{align*}
我的 LaTeX 代码片段:
\begin{align*}
X^{(0)} = \lbrace \mathsf{PR \ R \ ST0 \ T+ \ TP \ PR \ , \ PR \ R \ ST- \ T- \ TP \ PR \ , \\ \ PR \ rs \ ST0 \ T- \ TP \ PR \ , \ PR \ rS \ ST+ \ T+ \ TP \ PR \ , \\ \ PR \ Rs \ ST+ \ T+ \ TP \ PR} \rbrace
\end{align*}
我想使用align*
环境的原因是让长数学模式行中断。我尝试使用不同的命令(linebreak
、allowbreak
、//
等),但它们没有帮助。
答案1
在我上面的评论中,我已经指出了导致错误消息的原因。除此之外,我并不确信您走在正确的轨道上。纯粹是猜测,但我认为这些字母组合中的每一个都指定了一些会更频繁出现的实体。为了实现一致的排版,我建议使用宏。例如,您可以按如下方式重写您的示例。
\documentclass{article}
\usepackage{amsmath}
\newcommand\PR{\mathsf{PR}}
\newcommand\R{\mathsf{R}}
\newcommand\STz{\mathsf{ST_0}}
\newcommand\STm{\mathsf{ST_-}}
\newcommand\STp{\mathsf{ST_+}}
\newcommand\Tp{\mathsf{T_+}}
\newcommand\Tm{\mathsf{T_-}}
\newcommand\TP{\mathsf{TP}}
\newcommand\rs{\mathsf{rs}}
\newcommand\rS{\mathsf{rS}}
\newcommand\Rs{\mathsf{Rs}}
\begin{document}
\begin{align*}
X^{(0)} = \lbrace\;
& \PR\;\R\;\STz\;\Tp\;\TP\;\PR,\;
\PR\;\R\;\STm\;\Tm\;\TP\;\PR, \\
& \PR\;\rs\;\STz\;\Tm\;\TP\;\PR,\;
\PR\;\rS\;\STp\;\Tp\;\TP\;\PR, \\
& \PR\;\Rs\;\STp\;\Tp\;\TP\;\PR\;\rbrace
\end{align*}
\end{document}
这将产生以下输出。
为了避免对标识符链的格式进行硬编码(例如在中间留一些空格),你可以将定义
\newcommand\chainend{\chainend}
\newcommand\chain[1]{\chainx#1\chainend}
\newcommand\chainx[1]%
{\ifx\chainend#1\let\chainy\unskip % at the end, remove the last \;
\else#1\;\let\chainy\chainx % here \; is inserted between any two items of the chain
\fi
\chainy
}
\newcommand\chainy{}
放入序言中然后写
\chain{\PR\R\STz\Tp\TP\PR}
代替
\PR\;\R\;\STz\;\Tp\;\TP\;\PR
答案2
\mathsf
问题是,当一行还没有结束时,您无法结束它。
确定休息时间并添加\mathsf
:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation*}
\begin{aligned}
X^{(0)} = \lbrace
& \mathsf{PR \ R \ ST0 \ T{+} \ TP \ PR, \ PR \ R \ ST{-} \ T{-} \ TP \ PR,} \\
& \mathsf{PR \ rs \ ST0 \ T{-} \ TP \ PR, \ PR \ rS \ ST{+} \ T{+} \ TP \ PR,} \\
& \mathsf{PR \ Rs \ ST{+} \ T{+} \ TP \ PR} \rbrace
\end{aligned}
\end{equation*}
\end{document}
还要注意{+}
和{-}
以避免出现错误的间距。我认为从概念上讲,最好使用aligned
而不是align*
。另外,我不会在逗号之间留空格。
设置更复杂,但输入更简单,输出相同。
\documentclass{article}
\usepackage{amsmath}
\newcommand{\entity}[1]{%
\mathsf{%
\catcode`\ =12
\begingroup\lccode`~=`\ \lowercase{\endgroup\def~{\mathclose{\ }}}%
\scantokens{#1\empty}%
}%
}
\begin{document}
\begin{equation*}
\begin{aligned}
X^{(0)} = \lbrace
& \entity{PR R ST0 T+ TP PR}, \entity{PR R ST- T- TP PR}, \\
& \entity{PR rs ST0 T{-} TP PR}, \entity{PR rS ST{+} T{+} TP PR}, \\
& \entity{PR Rs ST{+} T{+} TP PR} \rbrace
\end{aligned}
\end{equation*}
\end{document}
使用不太复杂的代码:我们在空格处分割输入,然后\mathclose{\ }
在其位置重新插入;可以通过将参数更改为来获得不同的间距\mathclose
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\entity}{m}
{
\seq_set_split:Nnn \l_piotr_entity_seq { ~ } { #1 } %split at spaces
\mathsf
{
\seq_use:Nn \l_piotr_entity_seq { \mathclose{\ } }
}
}
\ExplSyntaxOff
\begin{document}
\begin{equation*}
\begin{aligned}
X^{(0)} = \lbrace
& \entity{PR R ST0 T+ TP PR}, \entity{PR R ST- T- TP PR}, \\
& \entity{PR rs ST0 T{-} TP PR}, \entity{PR rS ST{+} T{+} TP PR}, \\
& \entity{PR Rs ST{+} T{+} TP PR} \rbrace
\end{aligned}
\end{equation*}
\end{document}