Ich verwende das Paket philex
für linguistische Beispiele und versuche, ein Textelement am Ende der Zeile (rechts zentriert) einzufügen. Ich habe versucht, den \hfill
Befehl 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 philex
aus 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 philex
zu 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. expex
ist das einzige, das einen nativen Befehl für diese rechtsbündigen Kommentare bereitstellt: \rightcomment
.
Antwort2
Der Grund dafür ist, dass das philex
Paket 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 showframe
Paket dient lediglich zur Demonstration der Ausrichtung am Rand.
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 \lba
ist ähnlich fehlerhaft.