我正在尝试将三条重写规则相互排版。每条规则都包含在一个 expex 示例中,以与文档中其他地方的编号保持一致。目前,我有以下内容:
可以使用以下代码生成:
\documentclass{scrreprt}
\usepackage{expex}
\usepackage{phonrule}
\begin{document}
\pex
\a
\phon{1m.Irr}{\oneof[l]{
\envr*{ŋaŋ}{[+son]} \\
\envr*{ŋaŋu}{[$-$son]}}}
\a
\phon{12m.Irr}{\oneof[l]{
\envr*{naŋ}{[+son]} \\
\envr*{naŋu}{[$-$son]}}}
\a
\phon{2m.R}{\oneof[l]{
\envr*{nuŋ}{[+son]} \\
\envr*{nuŋu}{[$-$son]}}}
\xe
\end{document}
但是,对齐方式非常难看。具体来说,我想将每个规则中的箭头、括号和环境水平对齐。如果可能的话,我希望得到有关对齐示例的通用解决方案的建议,因为这个问题经常出现;但是,我不想为了实现这一点而花费数周时间学习 tex 编程的来龙去脉!
这里发布了几个问题和答案,涉及使用 phonrule 对规则内的单个元素进行对齐,但据我所知,之前没有人问过有关跨多个规则的元素对齐的问题。
答案1
我认为,最简单的解决方案是为音位规则的第一部分制作一个固定宽度的框。然后箭头将全部正确排列。这是宏的修改版本,\phon
它\fphon
使用最初设置为组中最长字符串的长度。您可以全局设置它(如果规则左侧的大多数长度大致相同)或每个示例集本地设置它。
\documentclass{scrreprt}
\usepackage{expex}
\usepackage{phonrule}
\usepackage{calc}
\newlength{\fixedlen}
\setlength{\fixedlen}{\widthof{12m.Irr}}
\newcommand{\fphon}[3][\parrow]{\parbox{\fixedlen}{#2} #1 #3}
\begin{document}
\pex
\a
\fphon{1m.Irr}{\oneof[l]{
\envr*{ŋaŋ}{[+son]} \\
\envr*{ŋaŋu}{[$-$son]}}}
\a
\fphon{12m.Irr}{\oneof[l]{
\envr*{naŋ}{[+son]} \\
\envr*{naŋu}{[$-$son]}}}
\a
\fphon{2m.R}{\oneof[l]{
\envr*{nuŋ}{[+son]} \\
\envr*{nuŋu}{[$-$son]}}}
\xe
\end{document}
如果您还希望斜线对齐,那么您可以修改内部\@env
命令以使用固定宽度的框:
\documentclass{scrreprt}
\usepackage{expex}
\usepackage{phonrule}
\usepackage{calc}
\newlength{\fixedlen}
\newlength{\rfixedlen}
\setlength{\fixedlen}{\widthof{12m.Irr}}
\setlength{\rfixedlen}{2em}
\newcommand{\fphon}[3][\parrow]{\parbox{\fixedlen}{#2} #1 #3}
\makeatletter
\renewcommand*{\@env}[3]{\parbox{\rfixedlen}{#2}~/#1#3}
\makeatother
\begin{document}
\pex
\a
\fphon{1m.Irr}{\oneof[l]{
\envr*{ŋaŋ}{[+son]} \\
\envr*{ŋaŋu}{[$-$son]}}}
\a
\fphon{12m.Irr}{\oneof[l]{
\envr*{naŋ}{[+son]} \\
\envr*{naŋu}{[$-$son]}}}
\a
\fphon{2m.R}{\oneof[l]{
\envr*{nuŋ}{[+son]} \\
\envr*{nuŋu}{[$-$son]}}}
\xe
\end{document}