我排版了一些方程组,我非常喜欢 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 能够好心地更新他的解决方案,以便在右对齐和左对齐之间切换(并在必要时纠正我的代码)。