我遇到了以下问题。我正在使用表格环境创建短语结构规则(语言学的东西,不关心它),并且我需要在规则中为那些可选的部分添加括号。这是我正在使用的演示代码:
\documentclass{article}
\newcommand{\symb}[2]{%
\begin{tabular}[t]{c}
\normalsize{#1}\\
\footnotesize{#2}
\end{tabular}}
% Optional rule support
\newcommand{\opt}[1]{\ensuremath{\left(#1\right)}}
% Macros
\newcommand{\ra}{\ensuremath{\rightarrow}}
\newcommand{\ua}{\ensuremath{\uparrow}}
\newcommand{\da}{\ensuremath{\downarrow}}
\newcommand{\blank}{\ensuremath{\quad}}
\begin{document}
\symb{IP}{}\blank
\symb{\ra}{}\blank
\opt{
\begin{tabular}[t]{c}
\normalsize{TopicP}\\
\footnotesize{{\sc (\ua topic) = \da}}\\
\footnotesize{{\sc (\ua topic) = (\ua TopicPath)}}
\end{tabular}
}\blank
\opt{\symb{IP}{\ua = \da}}
\end{document}
我知道这段代码并不是你见过的最优雅的东西。这是因为我不得不修改一个用于 LFG 短语结构规则的相当知名的宏……遗憾的是它不支持多个注释。因此,我使用表格以便在短语类别(NP、IP 等)下有多个注释。
谢谢!
答案1
从 s 中删除可选的[t]
定位参数tabular
;为了保持与第一行的对齐IP ->
,您可以使用另外三行tabular
,\symb{IP}{}\blank\symb{\ra}{}\blank
其中第一行有,另外两行有空行:
\documentclass{article}
\newcommand{\symb}[2]{%
\begin{tabular}{c}
\normalsize #1\\
\footnotesize #2
\end{tabular}}
% Optional rule support
\newcommand{\opt}[1]{\ensuremath{\left(#1\right)}}
% Macros
\newcommand{\ra}{\ensuremath{\rightarrow}}
\newcommand{\ua}{\ensuremath{\uparrow}}
\newcommand{\da}{\ensuremath{\downarrow}}
\newcommand{\blank}{\quad}
\begin{document}
\begin{tabular}{@{}c@{}}
\symb{IP}{}\blank
\symb{\ra}{}\blank \\ \\
\end{tabular}%
\opt{
\begin{tabular}{c}
\normalsize{TopicP} \\
\footnotesize \scshape (\ua topic) = \da\\
\footnotesize \scshape (\ua topic) = (\ua TopicPath)
\end{tabular}
}\blank
\opt{\symb{IP}{\ua = \da}}
\end{document}
我还将过时的 改为\sc
并\scshape
删除了一些多余的括号(\fontnotesize
,\normalsize
和\schape
不接受参数)。此外,埃格尔他在评论中提到,由于\quad
不是数学模式命令,\newcommand{\blank}{\quad}
所以是一个更正确的定义。
答案2
删除所有位置说明[t]
符\begin{tabular}{c}
:
\documentclass{article}
\newcommand{\symb}[2]{%
\begin{tabular}{c}
\normalsize{#1}\\
\footnotesize{#2}
\end{tabular}}
% Optional rule support
\newcommand{\opt}[1]{\ensuremath{\left(#1\right)}}
% Macros
\newcommand{\ra}{\ensuremath{\rightarrow}}
\newcommand{\ua}{\ensuremath{\uparrow}}
\newcommand{\da}{\ensuremath{\downarrow}}
\newcommand{\blank}{\ensuremath{\quad}}
\begin{document}
\symb{IP}{}\blank
\symb{\ra}{}\blank
\opt{
\begin{tabular}{c}
\normalsize{TopicP}\\
\footnotesize{{\sc (\ua topic) = \da}}\\
\footnotesize{{\sc (\ua topic) = (\ua TopicPath)}}
\end{tabular}
}\blank
\opt{\symb{IP}{\ua = \da}}
\end{document}
说明者[t]
将把表格在顶部、[c]
中心和[b]
底部对齐,正如 cyberSingularity 所指出的那样。
答案3
如果您想要使用分隔符顶部对齐的表格,您可以使用delarray
\documentclass{article}
\usepackage{delarray}
\newcommand{\symbx}[4]{%
\begin{tabular}[t]#1{c}#2
\normalsize{#3}\\
\footnotesize{#4}
\end{tabular}}
\newcommand\symb{\symbx{}{}}
\newcommand\bsymb{\symbx()}
% Optional rule support
\newcommand{\opt}[1]{\ensuremath{\left(#1\right)}}
% Macros
\newcommand{\ra}{\ensuremath{\rightarrow}}
\newcommand{\ua}{\ensuremath{\uparrow}}
\newcommand{\da}{\ensuremath{\downarrow}}
\newcommand{\blank}{\ensuremath{\quad}}
\begin{document}
\symb{IP}{}\blank
\symb{\ra}{}\blank
\begin{tabular}[t]({c})
\normalsize{TopicP}\\
\footnotesize{{\sc (\ua topic) = \da}}\\
\footnotesize{{\sc (\ua topic) = (\ua TopicPath)}}
\end{tabular}
\blank
\bsymb{IP}{\ua = \da}
\end{document}