Beamer, philex y \hfill

Beamer, philex y \hfill

Estoy usando el paquete philexpara ejemplos lingüísticos e intento colocar un elemento textual al final de la línea (centrado a la derecha). Intenté usar el \hfillcomando, pero como le mostrará el MWE, no proporciona una alineación coherente.

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

¿Alguien puede ayudarme a solucionar este comportamiento extraño?

Respuesta1

Debes evitarlo philexpor las razones que da egreg en su respuesta. Los paquetes más utilizados para componer ejemplos lingüísticos songb4e,expex, ylinguex(que es cargado por philex). VerExcelente comparación de Alan Munn de estos paquetespara más detalles. Muchas de las funciones que philexse añaden linguex(referencias cruzadas, ejemplos repetidos, personalización de etiquetas, etc.) están disponibles en formato expex.

Todos estos paquetes le permiten tener un comentario alineado a la derecha. Ver las respuestas aEtiquetar ejemplos lingüísticos con información del idiomapara obtener código que ilustre cómo hacer esto en cada paquete. expexes el único que proporciona un comando nativo para estos comentarios alineados a la derecha: \rightcomment.

Respuesta2

La razón es que el philexpaquete está escrito de una manera terrible y no protege el final de línea en las definiciones. El espacio que ves está provocado principalmente por estos espacios desprotegidos.

Ver¿Cuándo es perjudicial agregar un carácter de porcentaje al final de las líneas en un \newcommand o similar?para más información.

Son demasiados finales de línea desprotegidos para proponer una solución; También existe el problema de que las definiciones de macros son muy grandes y no utilizan modularidad.

Puedes “solucionar” el problema utilizando un truco salvaje; Sin embargo, esto puede dar resultados inesperados si realmente se necesitara un espacio en algún punto de una definición.

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

Tenga en cuenta que el final de las líneas debe protegerse también en la entrada. El showframepaquete es sólo para demostrar la alineación con el margen.

ingrese la descripción de la imagen aquí

La verdadera solución es no utilizar el paquete y pedirle a su responsable que corrija el código incorrecto.

Sólo para mostrar un ejemplo, aquí está la definición de \lb(números de línea agregados por conveniencia)

 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}

Faltan %al final de las líneas 95, 97, 98, 99, 100, 102 y 103. Los %al final de las líneas 101 y 108 son redundantes (la línea termina con una palabra de control). Los únicos caracteres colocados correctamente %se encuentran al final de las líneas 104 y 107.

La definición de \lbaes igualmente errónea.

información relacionada