当涉及到语法时,有些事情我不明白minipage
。在下面的例子中(这是我的真实情况,而不是 MWE),为什么我不能通过三个小页面“X”+“或”+“Y”来获得“X 或 Y”显示,{0.33\linewidth}
每个小页面都有?
我已尝试了十几个版本(更改宽度参数,使用两个而不是三个小页面,并在它们之间使用“或”等),但我从未获得这个“X 或 Y”的良好显示。
\documentclass{beamer}
\usepackage{forest}
\newcommand*{\phonfeat}[1]{
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\begin{document}
\begin{frame}
\begin{minipage}{0.33\linewidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[\phonfeat{+syllabic\\ $-$high\\ +low\\ \dots}
[\phonfeat{+highpitch\\ $-$lowpitch}]
[\phonfeat{$-$highpitch\\ +lowpitch}]
]
\end{forest}
\end{minipage}
\begin{minipage}[t]{0.33\linewidth}
or
\end{minipage}
\begin{minipage}[t]{0.33\linewidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[a
[H]
[L]
]
\end{forest}
\end{minipage}
\end{frame}
\end{document}
编辑 这是一个例子自音节音系学。我试图复制最初介绍该理论的论文中对自音节音系学的第一个说明(John Goldsmith。1976。自音节音系学概述。语言分析 2,23-68):
答案1
此解决方案采用了另一种方法。它抛弃了minipage
s 和\phonfeat
。(如果您确实想这样做,请使用 Forest 的align
选项并包装节点以添加分隔符。)
相反,我使用一些我编写的样式来回答有关avm
包的问题。这些样式将avm
环境包装在 Forest 样式中。
为了实现垂直间距,我修改begin draw
为使用 Ti钾Z 的baseline
选项。然后我将其包装在里面,linguistics centre
根据linguistics
默认值设置默认前导,但没有选项baseline
,但有居中。这意味着我们sn edges
开箱即用,无需手动设置锚点等。
您可以轻松地以通常的方式在全局或局部范围内应用linguistics
和linguistics centre
默认值。(我认为您可能需要某些幻灯片的标准默认值和其他幻灯片的居中 - 因此需要样式而不是全局声明default preamble
。)
linguistics
[如果提供一个不设置的选项就好了baseline
,因为我认为在 Beamer 演示中,垂直居中树木并不是一种不常见的要求。但也许我错了。]
水平间距只有几个\hfill
秒,因此我们不需要担心事物的宽度。
% gweler hefyd: ateb: http://tex.stackexchange.com/a/353744/ addaswy o gwestiwn J. Bratt: http://tex.stackexchange.com/q/352874/
% gweler hefyd: forest2-1-avm-avm-only.tex forest-2-1-avm-ss-avm.tex, forest2-avm-spacing.tex
\documentclass{beamer}
\usepackage{forest}
\useforestlibrary{linguistics}
\usepackage{avm,array}
\forestset{%
avm only/.style={%
TeX={\setlength\extrarowheight{-10pt}},
before typesetting nodes={%
for tree={%
make pure avm,
},
},
},
make pure avm/.style={%
content/.wrap value={%
\begin{avm}##1\end{avm}
},
plain content,
},
linguistics centre/.style={% based on linguistics defaults: baseline is removed & begin draw is added
default preamble={
sn edges,
for tree={align=center},
begin draw/.code={\begin{tikzpicture}[baseline=(current bounding box.center)]},
},
},
linguistics centre,
}
\begin{document}
\begin{frame}
\hfill
\begin{forest}
avm only,
linguistics centre,
[\[+syllabic\\$-$high\\+low\\\dots\]
[\[+highpitch\\$-$lowpitch\]]
[\[$-$highpitch\\+lowpitch\]]
]
\end{forest}%
\hfill
or\hfill
\begin{forest}
linguistics centre,
[a
[H]
[L]
]
\end{forest}%
\hfill\hskip0pt%
\end{frame}
\end{document}
如果您需要子脚本等,请参阅代码中提到的链接,了解实现此功能的avm
和make avm
样式。
编辑
正如我在评论中所说,linguistics centre
完全独立于avm only
。上面的代码对第二棵树使用前者,对第一棵树使用两者。因此,前者可用于管理垂直对齐,而无需更改树的任何内容。
两张幻灯片都使用\phonfeat
:一张直接使用;一张间接使用。
正如我之前提到的,如果你使用\phonfeat
,请注意它会在内容前引入一个空格。如果你不总是想要那里有一个空格,显然你应该从宏定义中删除那个空格。
第一行使用没有空格的定义;第二行使用有空格的原始定义。
\documentclass{beamer}
\usepackage{forest}
\useforestlibrary{linguistics}
\newcommand*{\phonfeat}[1]{%
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\newcommand*{\phonfeatorig}[1]{
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\forestset{%
linguistics centre/.style={% based on linguistics defaults: baseline is removed & begin draw is added
default preamble={
sn edges,
for tree={align=center},
begin draw/.code={\begin{tikzpicture}[baseline=(current bounding box.center)]},
},
},
linguistics centre,
phonfeat/.style={%
linguistics centre,
delay={%
for tree={%
content/.wrap value=\phonfeat{##1},
},
},
},
}
\begin{document}
\begin{frame}
Note the difference:
\phonfeat{a\\b}\phonfeat{c\\d}
\phonfeatorig{a\\b}\phonfeatorig{c\\d}
\end{frame}
\begin{frame}
\hfill
\begin{forest}
linguistics centre,
[\phonfeat{+syllabic\\$-$high\\+low\\\dots}
[\phonfeat{+highpitch\\$-$lowpitch}]
[\phonfeat{$-$highpitch\\+lowpitch}]
]
\end{forest}%
\hfill
or\hfill
\begin{forest}
linguistics centre,
[a
[H]
[L]
]
\end{forest}%
\hfill\hskip0pt%
\end{frame}
\begin{frame}
\hfill
\begin{forest}
phonfeat,
[+syllabic\\$-$high\\+low\\\dots
[+highpitch\\$-$lowpitch]
[$-$highpitch\\+lowpitch]
]
\end{forest}%
\hfill
or\hfill
\begin{forest}
linguistics centre,
[a
[H]
[L]
]
\end{forest}%
\hfill\hskip0pt%
\end{frame}
\end{document}
答案2
最后一次编辑没有更改字体(建议):
\documentclass[10pt]{beamer}
\usepackage{forest}
\newcommand*{\phonfeat}[1]{
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\begin{document}
\begin{frame}
\noindent\begin{minipage}{0.33\linewidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north, l sep=2em}
[\phonfeat{+syllabic\\ $-$high\\ +low\\ \dots}
[\phonfeat{+highpitch\\ $-$lowpitch}]
[\phonfeat{$-$highpitch\\ +lowpitch}]
]
\end{forest}
\end{minipage}%
\begin{minipage}{0.33\linewidth}
\begin{center}
or
\end{center}
\end{minipage}%
\begin{minipage}{0.33\linewidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[a
[H]
[L]
]
\end{forest}
\end{minipage}
\end{frame}
\end{document}
第一个答案(为什么)
尝试这个:
\documentclass{beamer}
\usepackage{forest}
\newcommand*{\phonfeat}[1]{
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\begin{document}
\begin{frame}
\fbox{\begin{minipage}{0.46\textwidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[\phonfeat{+syllabic\\ $-$high\\ +low\\ \dots}
[\phonfeat{+highpitch\\ $-$lowpitch}]
[\phonfeat{$-$highpitch\\ +lowpitch}]
]
\end{forest}
\end{minipage}
}
\fbox{\begin{minipage}{0.18\textwidth}
\begin{center}
or
\end{center}
\end{minipage}}
\fbox{
\begin{minipage}{0.2\textwidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[a
[H]
[L]
]
\end{forest}
\end{minipage}}
\end{frame}
\end{document}
输出:
\fbox 显示你的森林从第一个小页面开始就溢出了,所以我手动更改了小页面的长度。
...\fbox
解决了很多问题:P
编辑(通过改变字体大小解决):
但我还发现了其他一些事情:
下面的代码:
\documentclass[10pt]{beamer}
\usepackage{forest}
\newcommand*{\phonfeat}[1]{
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\begin{document}
\begin{frame}
\noindent\begin{minipage}{0.33\linewidth}
\scriptsize
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[\phonfeat{+syllabic\\ $-$high\\ +low\\ \dots}
[\phonfeat{+highpitch\\ $-$lowpitch}]
[\phonfeat{$-$highpitch\\ +lowpitch}]
]
\end{forest}
\end{minipage}\hfill
\begin{minipage}{0.33\linewidth}
\scriptsize
\begin{center}
or
\end{center}
\end{minipage}\hfill
\begin{minipage}{0.33\linewidth}
\scriptsize
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[a
[H]
[L]
]
\end{forest}
\end{minipage}
\end{frame}
\end{document}
工作正常。但是如果你删除 \hfill,它会在最后一行中给出最后一个 minipage(除非你减少 minipage 的长度。它以某种方式连接。但是 minipage 之间的空间(标记)导致了问题。因此,使用代替%
也\hfill
可以正常工作。)
答案3
您的小页面的宽度不符合其内容的宽度。更简单的解决方案是使用tabular
封装单元格内容的环境,adjustbox
以便确定单元格内容的垂直位置 - 在顶部(valign=t
)还是在中间(`valign=m):
\documentclass{beamer}
\usepackage{forest}
\usepackage{adjustbox}
\newcommand*{\phonfeat}[1]{
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\begin{document}
\begin{frame}
\centering
\setlength\tabcolsep{0pt}
\begin{tabular}{ccc}
\adjustbox{valign=m}{
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[\phonfeat{+syllabic\\ $-$high\\ +low\\ \dots}
[\phonfeat{+highpitch\\ $-$lowpitch}]
[\phonfeat{$-$highpitch\\ +lowpitch}]
]
\end{forest} }
&
\adjustbox{valign=m}{
or
}
&
\adjustbox{valign=m}{
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[a
[H]
[L]
]
\end{forest} }
\end{tabular}
\end{frame}
\end{document}
如果希望底部对齐,则adjustbox
可以省略使用。
编辑:
adjustbox
在内容周围添加空间(与 dominipage
或类似tabular
)。如果觉得这令人不安,您可以通过设置\tabcolsep
为(部分)补偿其水平部分0pt
,因为现在已添加到上面姆韦。
我没有干涉forest
树的设计。它可以如何改进,你可以在 nice 中看到成本加运费回答。
答案4
当我在 Beamer 中遇到此类问题时,我总是使用文本位置具有绝对定位的包。经过多次尝试和错误,我认为满足 OP 要求(在同一行上有三个相同宽度且不重叠的框)的代码可以是:
\documentclass{beamer}
\usepackage{forest}
\usepackage[absolute,overlay,showboxes]{textpos} %absolute positioning
\TPGrid[20mm,20mm]{30}{10}
\textblockorigin{0mm}{0mm}
\newcommand*{\phonfeat}[1]{
\ensuremath{%
\left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]}}
\begin{document}
\begin{frame}
\begin{textblock}{14.54}(0,5)
%\begin{minipage}{0.33\linewidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[\phonfeat{+syllabic\\ $-$high\\ +low\\ \dots}
[\phonfeat{+highpitch\\ $-$lowpitch}]
[\phonfeat{$-$highpitch\\ +lowpitch}]
]
\end{forest}
%\end{minipage}
\end{textblock}
\begin{textblock}{14.54}(14.54,5)
%\begin{minipage}[t]{0.33\linewidth}
or
%\end{minipage}
\end{textblock}
\begin{textblock}{14.54}(29.08,5)
%\begin{minipage}[t]{0.33\linewidth}
\begin{forest} for tree = {parent anchor = south, child anchor = north}
[a
[H]
[L]
]
\end{forest}
%\end{minipage}
\end{textblock}
\end{frame}
\end{document}
在我看来,结果不太令人满意。