Alterar idioma de referência automática?

Alterar idioma de referência automática?

Estou tentando usar látex para escrever algo em polonês. Estou usando babelo pacote junto com o hyperref. Achei que isso seria suficiente, mas aparentemente não é.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[polish]{babel}
\usepackage[utf8]{inputenc}

\usepackage{hyperref}

\begin{document}
\section{foo}
\label{sec:here}

\begin{figure}
\caption{\label{fig:here} This is a figure caption}
\end{figure}

\autoref{sec:here}

\autoref{fig:here}
\end{document}

Isso produz:

saída

Como você pode ver, a legenda da figura está escrita corretamente em polonês, mas as referências automáticas ainda estão em inglês.

Acho que deveria ser algo simples. Por exemplo, a perguntaNomes de autoref incorretos ao usar o recurso `main=` do babelsugere que o acimadevetrabalhar. Todo o outro material que consegui encontrar no stackexchange ou no google estava focado em usos mais específicos do que o que estou descrevendo.

Então, o que estou perdendo?

Uma possível solução que conheço é definir manualmente todos esses nomes por meio de \def\figureautorefname, mas espero que alguém já tenha feito isso em um pacote público e seja mantido adequadamente.

Responder1

Infelizmente, o suporte ao Polishidioma não está definido hyperrefpara as \...autorefnamemacros.

hyperrefainda suporta english,afrikaans,french,german,spanish,catalan,portuges,magyar, russian,italian,vietnamese, a partir da versão 6.85a de 14/03/2017.

Um teste de uma solução:

A macro

\ProvidePolishAutoRefNames{figure=\figurename,chapter,section={PolishSectionName},table,equation={PolishEquationName}}

percorre os nomes dos contadores fornecidos em uma lista separada por vírgulas e gera o \##1autorefnameinstantaneamente.

Se figure=\figurenamefor fornecido, ele usa o nome from \figurenameetc, se Xfor fornecido apenas o nome do contador, ele tenta usar \Xname, que não está definido em nenhum caso.

Como não falo polonês, usei PolishSectionNameetc. como substituto.

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[polish]{babel}
\usepackage[utf8]{inputenc}

\usepackage{xparse}

\ExplSyntaxOn
\cs_generate_variant:Nn \cs_gset:cpn {cpx,cpo}
\NewDocumentCommand{\ProvidePolishAutoRefNames}{m}{%
  \seq_set_from_clist:Nn \l_tmpa_seq {#1}
  \seq_map_inline:Nn \l_tmpa_seq {% Loop through names
    \seq_set_split:Nnn \l_tmpb_seq {=} {##1}
    \tl_set:Nx \l_tmpa_tl {\seq_item:Nn \l_tmpb_seq {1} autorefname}
    \int_compare:nNnTF {\seq_count:N \l_tmpb_seq } > {1} {% Check whether there is a "=", if so, use the RHS 
      \cs_gset:cpx {\l_tmpa_tl} {\seq_item:Nn \l_tmpb_seq {2}}
    }{% No, try to evaluate \##1name, e.g. \chaptername
      \cs_gset:cpx {\l_tmpa_tl} {\use:c{\seq_item:Nn \l_tmpb_seq {1}name}}
    }
  }
}
\ExplSyntaxOff

\usepackage{hyperref}

\addto\captionspolish{%
  \ProvidePolishAutoRefNames{figure=\figurename,chapter,section={PolishSectionName},table,equation={PolishEquationName}}
}

\begin{document}

\chapter{Foo chapter}\label{foochapter}



\section{foo}

\figureautorefname

\label{sec:here}

\begin{figure}
\caption{\label{fig:here} This is a figure caption}
\end{figure}

\begin{equation} 
  E=mc^{2} \label{fooequation}
\end{equation}

See \autoref{foochapter} or \autoref{fooequation}

\autoref{sec:here}

\autoref{fig:here}
\end{document}

insira a descrição da imagem aqui

Uma versão semelhante, definindo \HyLang@polishde forma análoga a HyLang@frenchetc.

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[polish]{babel}
\usepackage[utf8]{inputenc}

\usepackage{xparse}

\ExplSyntaxOn
\cs_generate_variant:Nn \cs_gset:cpn {cpx,cpo}
\NewDocumentCommand{\ProvidePolishAutoRefNames}{m}{%
  \seq_set_from_clist:Nn \l_tmpa_seq {#1}
  \seq_map_inline:Nn \l_tmpa_seq {% Loop through names
    \seq_set_split:Nnn \l_tmpb_seq {=} {##1}
    \tl_set:Nx \l_tmpa_tl {\seq_item:Nn \l_tmpb_seq {1} autorefname}
    \int_compare:nNnTF {\seq_count:N \l_tmpb_seq } > {1} {% Check whether there is a "=", if so, use the RHS 
      \cs_gset:cpx {\l_tmpa_tl} {\seq_item:Nn \l_tmpb_seq {2}}
    }{% No, try to evaluate \##1name, e.g. \chaptername
      \cs_gset:cpx {\l_tmpa_tl} {\use:c{\seq_item:Nn \l_tmpb_seq {1}name}}
    }
  }
}
\ExplSyntaxOff

\usepackage{hyperref}


\makeatletter
\def\HyLang@polish{
  \ProvidePolishAutoRefNames{figure=\figurename,chapter,section={PolishSectionName},table,equation={PolishEquationName}}
}

\HyLang@DeclareLang{polish}{polish}{}

\makeatother



\begin{document}

\chapter{Foo chapter}\label{foochapter}



\section{foo}

\figureautorefname

\label{sec:here}

\begin{figure}
\caption{\label{fig:here} This is a figure caption}
\end{figure}

\begin{equation} 
  E=mc^{2} \label{fooequation}
\end{equation}

See \autoref{foochapter} or \autoref{fooequation}

\autoref{sec:here}

\autoref{fig:here}
\end{document}

informação relacionada