我正在使用该包philex
获取语言示例,并尝试将文本元素放在行尾(右居中)。我尝试使用该\hfill
命令,但正如 MWE 向您展示的那样,它没有提供连贯的对齐。
\documentclass[12pt]{beamer}
\usepackage[francais]{babel}
\usepackage{philex}
\begin{document}
\begin{frame}{The syntactic ambiguity}
\lb{}{
\lba{}{Fred eats an apple. \hfill (a)}
\lbz{}{Fred eats an apple. \hfill (a)}
}
\end{frame}
\end{document}
有人能帮我纠正这个奇怪的行为吗?
答案1
您应该避免使用philex
egreg 在其回答中给出的原因。用于排版语言示例的最常用软件包是gb4e
,expex
, 和linguex
(由 加载philex
)。请参阅Alan Munn 对这些软件包进行了出色的比较philex
了解更多详情。 中新增的许多功能linguex
(交叉引用、重复示例、标签自定义等)均可用expex
。
所有这些包都允许您使用右对齐注释。请参阅使用语言信息标记语言示例用于说明如何在每个包中执行此操作的代码。expex
是唯一为这些右对齐注释提供本机命令的代码:\rightcomment
。
答案2
原因是这个philex
包写得很糟糕,没有保护定义中的行尾。你看到的空格主要是由这些未受保护的空格造成的。
看在 \newcommand 或类似命令中,在行尾添加百分号什么时候有害了解更多信息。
有太多未受保护的行尾,无法提出修复;还有一个问题是宏定义非常大并且不使用模块化。
您可以使用疯狂的黑客手段来“修复”该问题;但是,如果在定义的某个点上确实需要空格,这可能会产生意想不到的结果。
\documentclass{article}
\usepackage{showframe}
\endlinechar=-1
\usepackage{philex}
\endlinechar=13
\begin{document}
\lb{y}{%
\lba{y1}{Fred eats an apple. \hfill (a)}%
\lbz{y2}{Fred eats an apple. \hfill (a)}%
}
\end{document}
注意,输入时也必须保护行尾。该showframe
包仅用于演示与边距的对齐。
真正的解决方法是不要使用该包并要求其维护者纠正错误的代码。
仅举一个例子,这里是定义\lb
(为方便起见添加了行号)
95 \newcommand{\lb}[3][n]{
96 \ifdim\lastskip=\Extopsep\vspace\Exredux\else \fi
97 \immediate\write\@auxout{\unexpanded{\expandafter\gdef\csname#2r\endcsname{#3}\expandafter\gdef\csname#2\endcsname{\ref{#2}}
98 \expandafter\gdef\csname#2p\endcsname{\MakeLowercase#3}}}
99 \expandafter\providecommand\expandafter{\csname#2r\endcsname}{#3}
100 \expandafter\providecommand\expandafter{\csname#2\endcsname}{\ref{#2}}\expandafter\providecommand\expandafter{\csname#2p\endcsname}{\MakeLowercase#3}
101 \ifhyperref%
102 \renewcommand{\theFnExNo}{\roman{FnExNo}}
103 \ex. \label{#2} \if#1c \setlength{\abovedisplayskip}{1ex}
104 \setlength{\belowdisplayskip}{2ex}%
105 \parbox{\centro}{\centering \hypertarget{#2}{#3}\philpunct}\else \hypertarget{#2}{#3}\philpunct\fi\par
106 \else
107 \ex. \label{#2} \if#1c \setlength{\abovedisplayskip}{1ex}\setlength{\belowdisplayskip}{2ex}%
108 \parbox{\centro}{\centering #3\philpunct}\else #3\philpunct\fi\par%
109 \fi}
%
95、97、98、99、100、102 和 103 行末尾缺少。101%
和 108 行末尾的字符是多余的(该行以控制字结尾)。唯一正确放置的%
字符位于 104 和 107 行末尾。
的定义\lba
同样存在缺陷。