原始答案(包含较早的更新)

原始答案(包含较早的更新)

我排版了一些方程组,我非常喜欢 systeme 包提供的输入(以及输出)格式。

现在,我想知道是否有一种方法可以不使用 来将等式的右侧也对齐\hphantom?在下面的例子中,我在第二个系统中得到了我想要的结果,但没有得到第一个系统的结果。但我用 做到了\hphantom

 \documentclass{minimal}
 \usepackage{systeme}
 \begin{document}
 \[
 \systeme{x+y=2,x-y=-2}
 \]
 \[
 \systeme{x+y=\hphantom{-}2,x-y=-2}
 \]
 \end{document}

给予

示例的输出

更新

如果有人想知道为什么人们会希望右侧与右手边齐平,这里有一张图片可以更好地解释这一点。如果右侧不与右手边齐平,箭头的末端不会在同一水平位置,看起来会很糟糕。

展示

另外,我可以说我已经阅读了 systeme 包的文档,但我没有发现任何类似的东西(但我的法语生疏了)。我也浏览了包的源代码,但这对我来说太复杂了……

答案1

该包systeme为左侧和右侧提供了不同的对齐选项。默认为r,l,即未知数右对齐,常数项左对齐。可以使用 进行更改\sysalign

\documentclass{article}
\usepackage{systeme}

\begin{document}

\[
\sysalign{r,r}% default is r,l
\systeme{x+y=2,x-y=-2}
\]

\end{document}

在此处输入图片描述

\sysalign如果您希望它适用于每个系统,请在序言中发出声明。


原始答案(包含较早的更新)

将最后一列左对齐是包的选择,据我所知,没有通过设置选项来更改它的规定。

\SYS@makesyspreamble@i您可以通过重新定义负责设置列对齐的命令来更改它;最简单的方法是使用regexpatch

\documentclass{article}

\usepackage{systeme}
\usepackage{regexpatch}

\makeatletter
\xpatchcmd{\SYS@makesyspreamble@i}
  {$##$\hfil\null}% left alignment
  {\hfil$##$\null}% right alignment
  {}{}
\makeatother

\begin{document}

\[
\systeme{x+y=2,x-y=-2}
\]

\end{document}

在此处输入图片描述

如果您需要在左对齐和右对齐之间切换,请按照以下步骤操作。

\documentclass{article}

\usepackage{systeme}
\usepackage{regexpatch}

\makeatletter
\xpatchcmd{\SYS@makesyspreamble@i}
 {$##$\hfil\null}
 {\span\SYSX@afterequalalignment\null}
 {}{}
\newcommand{\SYSX@afterequalalignmentleft}{$##$\hfil}% default
\newcommand{\SYSX@afterequalalignmentright}{\hfil$##$}% default
\newcommand{\rightalignafterequal}{%
  \let\SYSX@afterequalalignment\SYSX@afterequalalignmentright
}
\newcommand{\leftalignafterequal}{%
  \let\SYSX@afterequalalignment\SYSX@afterequalalignmentleft
}
\leftalignafterequal % default
\makeatother

\begin{document}

\[
\systeme{x+y=2,x-y=-2}
\]
\[
\rightalignafterequal
\systeme{x+y=2,x-y=-2}
\]

\end{document}

\rightalignafterequal声明遵循通常的范围规则,因此如果您希望所有系统都具有右对齐,则可以在序言中发出它。

在此处输入图片描述

更新

最新版本systeme已经不再使用@私有宏,所以需要修改补丁。

\documentclass{article}

\usepackage{systeme}
\usepackage{regexpatch}

\chardef\savedunderscorecatcode=\catcode`\_
\catcode`\_=11
\xpatchcmd{\SYS_makesyspreamble_i}
 {$##$\hfil\null}
 {\span\SYSX_afterequalalignment\null}
 {}{}
\newcommand{\SYSX_afterequalalignmentleft}{$##$\hfil}% default
\newcommand{\SYSX_afterequalalignmentright}{\hfil$##$}% default
\newcommand{\rightalignafterequal}{%
  \let\SYSX_afterequalalignment\SYSX_afterequalalignmentright
}
\newcommand{\leftalignafterequal}{%
  \let\SYSX_afterequalalignment\SYSX_afterequalalignmentleft
}
\leftalignafterequal % default
\catcode`\_=\savedunderscorecatcode

\begin{document}

\[
\systeme{x+y=2,x-y=-2}
\]
\[
\rightalignafterequal
\systeme{x+y=2,x-y=-2}
\]

\end{document}

答案2

我正在重新发布这篇旧帖子,因为 systeme 已经改变,所以 egreg 的解决方案不再有效,因为修补的命令名称已经改变。

要右对齐系统版本 0.32(日期为 2019/01/13)的最后一列,请使用:

\makeatletter
\catcode`\_11
\xpatchcmd{\SYS_makesyspreamble_i}
{$##$\hfil\null}% left alignment
{\hfil$##$\null}% right alignment
{}{}
\catcode`\_8
\makeatother

我希望 egreg 能够好心地更新他的解决方案,以便在右对齐和左对齐之间切换(并在必要时纠正我的代码)。

相关内容