Beamer、philex、\hfill

Beamer、philex、\hfill

私は言語の例としてパッケージを使用しており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。言語例をタイプセットするのに最もよく使われるパッケージはgb4eexpex、 そして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同様に誤りがあります。

関連情報