Beamer, Philex e \hfill

Beamer, Philex e \hfill

Estou usando o pacote philexpara exemplos linguísticos e tento colocar um elemento textual no final da linha (centralizado à direita). Tentei usar o \hfillcomando, mas como o MWE vai mostrar, ele não fornece um alinhamento coerente.

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

Alguém pode me ajudar a corrigir esse comportamento estranho?

Responder1

Você deve evitar philexpelos motivos que egreg dá em sua resposta. Os pacotes mais comumente usados ​​para composição de exemplos linguísticos sãogb4e,expex, elinguex(que é carregado por philex). VerA excelente comparação de Alan Munn entre esses pacotespara mais detalhes. Muitos dos recursos philexadicionados linguex(referência cruzada, repetição de exemplos, personalização de rótulos, etc.) estão disponíveis em expex.

Todos esses pacotes permitem que você tenha um comentário alinhado à direita. Veja as respostas paraRotulando exemplos linguísticos com informações linguísticaspara código que ilustra como fazer isso em cada pacote. expexé o único que fornece um comando nativo para estes comentários alinhados à direita: \rightcomment.

Responder2

A razão é que o philexpacote é escrito de uma forma terrível e não protege o final das linhas nas definições. O espaço que você vê é causado principalmente por esses espaços desprotegidos.

VerQuando é prejudicial adicionar caracteres de porcentagem no final das linhas em um \newcommand ou similarPara maiores informações.

São demasiados fins de linha desprotegidos para propor uma solução; há também o problema de as definições de macro serem muito grandes e não usarem modularidade.

Você pode “consertar” o problema usando um hack selvagem; no entanto, isto pode dar resultados inesperados se um espaço for realmente necessário em algum ponto de uma definição.

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

Observe que os finais de linha devem ser protegidos também na entrada. O showframepacote é apenas para demonstrar o alinhamento à margem.

insira a descrição da imagem aqui

A verdadeira solução é não usar o pacote e pedir ao mantenedor para corrigir o código incorreto.

Apenas para mostrar um exemplo, aqui está a definição de \lb(números de linha adicionados por conveniência)

 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}

Estão faltando %no final das linhas 95, 97, 98, 99, 100, 102 e 103. Os %no final das linhas 101 e 108 são redundantes (a linha termina com uma palavra de controle). Os únicos caracteres colocados corretamente %estão no final das linhas 104 e 107.

A definição de \lbaé igualmente falha.

informação relacionada