Como resolver o erro “comando \f já definido” ao executar o pacote ling-macros

Como resolver o erro “comando \f já definido” ao executar o pacote ling-macros

Estou compondo meu trabalho (linguística) e ele funcionou bem no XeLaTeX até usar o ling-macrospacote, que deveria estar funcionando bem, já que não é um pacote novo e não encontrei perguntas semelhantes sobre o erro que encontrei. Isto é o que eu consegui:

    > ! LaTeX Error: Command \f already defined.
    >                Or name \end... illegal, see p.192 of the manual.
    > 
    > See the LaTeX manual or LaTeX Companion for explanation. Type  H
    > <return>  for immediate help.  ...                                    
    > 
    >                                                    l.235 \newcommand{\f}[1]{\ensuremath{#1}}
    >                                           ^^I^^I^^I^^I^^I^^I% Formal express...
    > 
    > ?

Tenho certeza de que tem alguma coisa a ver com ling-macros(ou com seu conflito com alguns outros pacotes que usei?), pois essa é uma mensagem muito específica que recebi; quando eu %'ed essa linha, o arquivo funcionou bem novamente (veja a última linha abaixo).

O seguinte é meu preâmbulo:

\documentclass[12pt]{article}
\usepackage[hmargin=2.5cm, vmargin=2.5cm]{geometry}
\setlength\parindent{4ex}
\setlength\parskip{0pt}
\usepackage{setspace}
\doublespace
\usepackage{fontspec}
\setmainfont{Times New Roman}
\defaultfontfeatures{Scale=MatchLowercase}
\usepackage{polyglossia}

\usepackage[rm, bf]{titlesec} % formatting taken out for brevity

\usepackage{longtable}

\usepackage{natbib}

\usepackage{fancyhdr} % actual header taken out
\pagestyle{fancy}

\usepackage{titling} % actual title with author info taken out

\usepackage{linguex}
\usepackage{tikz-qtree}
\usepackage{ling-macros}

Responder1

O linguexpacote define \fcomo um alias para \b. Também \brecebe um significado diferente do LaTeX padrão (que é o acento “underbar”).

No contexto de linguex, dentro \ex.de uma entrada \a.e \b.para introdução de itens. O pacote também prevê \c. \d. \e. \f.mais itens.

Você pode contornar o problema de duas maneiras. Uma delas é bastante drástica, ou seja, remover a possibilidade de usar \f.for itens dentro de \ex.: basta adicionar \let\f\relaxbefore \usepackage{ling-macros}.

Se quiser usar \f.para itens internos \ex., você precisa de um truque mais elaborado, mostrado abaixo.

\documentclass[12pt]{article}

%% packages

\usepackage[hmargin=2.5cm, vmargin=2.5cm]{geometry}
\usepackage{setspace}
\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage[rm, bf]{titlesec} % formatting taken out for brevity
\usepackage{longtable}
\usepackage{natbib}
\usepackage{fancyhdr} % actual header taken out
\usepackage{titling} % actual title with author info taken out

\usepackage{linguex}
\usepackage{tikz-qtree}

%% fix the issues with \f
\let\f\relax % remove the definition done by linguex
\usepackage{ling-macros} % load the package
\makeatletter
\let\lingmacros@f\f
\DeclareRobustCommand{\f}{\@ifnextchar.\b\lingmacros@f}
\makeatother

%% settings

\setmainfont{Times New Roman}
\defaultfontfeatures{Scale=MatchLowercase}

\pagestyle{fancy}
\doublespacing % not \doublespace
% you don't know what ex is, until at begin document
\AtBeginDocument{\setlength\parindent{4ex}}
% leave a little flexibility to \parskip
%\setlength\parskip{0pt}

Separei a parte de carregamento do pacote da parte de configurações. Observe que essa \doublespacenão é a declaração correta, que deveria ser \doublespacing.

informação relacionada