Beamer, Philex und \hfill

Beamer, Philex und \hfill

Ich verwende das Paket philexfür linguistische Beispiele und versuche, ein Textelement am Ende der Zeile (rechts zentriert) einzufügen. Ich habe versucht, den \hfillBefehl zu verwenden, aber wie Ihnen MWE zeigt, bietet es keine kohärente Ausrichtung.

\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}

Kann mir jemand helfen, dieses seltsame Verhalten zu beheben?

Antwort1

Sie sollten dies philexaus den Gründen vermeiden, die egreg in seiner Antwort angibt. Die am häufigsten verwendeten Pakete zum Setzen linguistischer Beispiele sindgb4e,expex, Undlinguex(wird geladen von philex). SieheAlan Munns hervorragender Vergleich dieser Paketefür weitere Einzelheiten. Viele der Funktionen, die philexzu hinzufügen linguex(Querverweise, Wiederholung von Beispielen, Beschriftungsanpassung usw.), sind in verfügbar expex.

Alle diese Pakete ermöglichen rechtsbündige Kommentare. Siehe die Antworten aufKennzeichnung sprachlicher Beispiele mit Sprachinformationenfür Code, der veranschaulicht, wie dies in jedem Paket geht. expexist das einzige, das einen nativen Befehl für diese rechtsbündigen Kommentare bereitstellt: \rightcomment.

Antwort2

Der Grund dafür ist, dass das philexPaket schrecklich geschrieben ist und Zeilenenden in Definitionen nicht schützt. Der angezeigte Leerraum wird hauptsächlich durch diese ungeschützten Leerzeichen verursacht.

SehenWann ist es schädlich, in einem \newcommand oder ähnlichem ein Prozentzeichen am Zeilenende hinzuzufügen?für mehr Informationen.

Um eine Lösung vorzuschlagen, gibt es zu viele ungeschützte Zeilenenden. Darüber hinaus besteht das Problem, dass die Makrodefinitionen sehr groß sind und keine Modularität nutzen.

Sie können das Problem durch einen wilden Hack „beheben“. Dies kann jedoch zu unerwarteten Ergebnissen führen, wenn an einer bestimmten Stelle einer Definition wirklich ein Leerzeichen benötigt wird.

\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}

Beachten Sie, dass Zeilenenden auch in der Eingabe geschützt werden müssen. Das showframePaket dient lediglich zur Demonstration der Ausrichtung am Rand.

Bildbeschreibung hier eingeben

Die wirkliche Lösung besteht darin, das Paket nicht zu verwenden und seinen Betreuer zu bitten, den fehlerhaften Code zu korrigieren.

Nur um ein Beispiel zu zeigen, hier ist die Definition von \lb(Zeilennummern der Einfachheit halber hinzugefügt):

 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}

Es fehlen die Zeichen %am Ende der Zeilen 95, 97, 98, 99, 100, 102 und 103. Die Zeichen %am Ende der Zeilen 101 und 108 sind redundant (die Zeile endet mit einem Steuerwort). Die einzigen korrekt platzierten %Zeichen sind am Ende der Zeilen 104 und 107.

Die Definition von \lbaist ähnlich fehlerhaft.

verwandte Informationen