私は言語の例としてパッケージを使用しており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
egregが回答で挙げている理由から、避けるべきですphilex
。言語例をタイプセットするのに最もよく使われるパッケージはgb4e
、expex
、 そしてlinguex
( によってロードされますphilex
)。アラン・マンによるこれらのパッケージの優れた比較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
同様に誤りがあります。