phonrule 包中的 \oneof 对齐

phonrule 包中的 \oneof 对齐

这个问题源于这里的问题/答案其中一个答案提到如何使用该phonrule包创建音位规则。

MWE 在这里:

\documentclass[a4paper,12pt,twoside,onecolumn]{memoir}

\usepackage{phonrule}

\begin{document}

\phon{x}{\oneof{
\envr{w}{z} \\
\envl{v}{\phonfeat{
+feature x \\
-feature y}}}}

\end{document}

结果是:

在此处输入图片描述

您可以看到输出和环境都居中了。有什么方法可以取消它们的居中和/或左对齐吗?居中功能似乎是 v1.2.0 中的故意添加的phonrule。但文档中没有其他关于对齐的内容。

我需要它是标准的左对齐版本 - 即左对齐输出左对齐环境。类似这样(具体间距可灵活调整):

在此处输入图片描述

尝试添加任何类型的对齐通常都会破坏phonrule环境,并且无法编译或者它对齐整个图形/示例,而不仅仅是单个(输出+环境)部分。

我一直使用与上述问题中利用的另一个答案大致相同的方法\mbox。这很好,但是添加其他输出和环境要么很混乱,要么需要根据差异使用新命令。 phonrule通常以更干净、更可扩展的方式完成所有这些操作,这就是为什么我正在研究能够修改对齐方式的原因。

答案1

以下是完整的重新实现phonrule

\documentclass{article}

\providecommand*{\textrightarrow}{\ensuremath{\rightarrow}}
\providecommand*{\textplus}{\ensuremath{+}}
\providecommand*{\textminus}{\ensuremath{-}}

\newcommand*{\phold}{\rule[-1.5pt]{1.5ex}{.5pt}}

\newcommand*{\phon}[2]{#1 \textrightarrow{} #2}
\newcommand*{\phonc}[3]{\phon{#1}{#2}~/~#3}
\newcommand*{\phonr}[3]{\phon{#1}{#2}~/~\phold#3}
\newcommand*{\phonl}[3]{\phon{#1}{#2}~/~#3\phold}
\newcommand*{\phonb}[4]{\phonl{#1}{#2}{#3}#4}

\makeatletter
\newcommand*{\env}{\@ifstar{\@env{&}}{\@env{~}}}
\newcommand*{\@env}[3]{#2~/#1#3}

\newcommand*{\envr}{\@ifstar{\@envr{&}}{\@envr{~}}}
\newcommand*{\@envr}[3]{\@env{#1}{#2}{\phold#3}}
\newcommand*{\envl}{\@ifstar{\@envl{&}}{\@envl{~}}}
\newcommand*{\@envl}[3]{\@env{#1}{#2}{#3\phold}}
\newcommand*{\envb}{\@ifstar{\@envb{&}}{\@envb{~}}}
\newcommand*{\@envb}[4]{\@env{#1}{#2}{#3\phold#4}}

% set environment for feature matrix with square brackets
\newcommand*{\phonfeat}[1]{%
  \ensuremath{%
    \left[\begin{tabular}{c}#1\end{tabular}\right]%
  }%
}
\newcommand*{\oneof}[2][c]{%
  \ensuremath{%
    \left\{
    \begin{tabular}{#1#1}#2\end{tabular}
    \right.
  }%
}

\begin{document}
\phon{x}{\oneof[l]{ \envr*{w}{z} \\
      \envl*{v}{\phonfeat{
      \textplus feature x \\
      \textminus feature y
}}}}

\phon{x}{\oneof[l]{
   \envr{w}{z} \\
   \envl{v}{\phonfeat{
   \textplus feature x \\
   \textminus feature y
}}}}

\phon{x}{\oneof{
   \envr{w}{z} \\
   \envl{v}{\phonfeat{
   \textplus feature x \\
   \textminus feature y
}}}}

\end{document}

具体变化如下:

  1. \oneof命令接受一个可选参数用于内部对齐,默认c与原始命令一样;它可以是lr

  2. 命令\env\envl\envr具有\envb* 形式,它&在 之后插入一个/而不是默认的~,因此它们可以在 的参数中使用\oneof以获得所需的对齐。

在上面的代码中,我使用了所有三种可能性;第一个例子是你正在寻找的,第二个例子只是左对齐,最后一个与原始的一样。

在此处输入图片描述

答案2

\oneofl通过添加行来定义新命令

\newcommand\oneofl[1]{\ensuremath{\left\{\begin{tabular}{l} #1 \end{tabular}\right.}}

到你的序言中(即,在\documentclass和之间\begin{document}),并用它来代替\oneof。然后你可以通过下面的代码获得以下输出。

在此处输入图片描述

\documentclass{article}
\usepackage{phonrule}
\newcommand\oneofl[1]{\ensuremath{\left\{\begin{tabular}{l} #1 \end{tabular}\right.}}
\begin{document}

\phon{x}{\oneofl{
\envr{w}{z} \\
\envl{v}{\phonfeat{
+feature x \\
-feature y}}}}

\end{document}

相关内容