
Я пытаюсь использовать латекс, чтобы написать что-то на польском языке. Я использую babel
пакет вместе с hyperref
. Я думал, что этого будет достаточно, но, видимо, это не так.
\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}
Это производит:
Как вы видите, подпись к рисунку написана правильно на польском языке, но авторефераты по-прежнему на английском.
Я думаю, это должно быть что-то простое. Например, вопросНеправильные имена автореф. при использовании функции `main=` в babelпредполагает, что вышеизложенноедолженработа. Все остальные материалы, которые мне удалось найти на stackexchange или в google, были сосредоточены на более конкретных вариантах использования, чем тот, который я описываю.
Так что же я упускаю?
Возможный способ обойти эту проблему, о котором я знаю, — вручную определить все эти имена через \def\figureautorefname
, но я надеюсь, что кто-то уже сделал это в публичном пакете и он надлежащим образом поддерживается.
решение1
К сожалению, поддержка Polish
языка не определена вhyperref
языка в макросах\...autorefname
.
hyperref
пока не поддерживает english,afrikaans,french,german,spanish,catalan,portuges,magyar, russian,italian,vietnamese
, начиная с версии 6.85a от 14.03.2017.
Пробный вариант решения:
Макрос
\ProvidePolishAutoRefNames{figure=\figurename,chapter,section={PolishSectionName},table,equation={PolishEquationName}}
перебирает имена счетчиков, указанные в списке, разделенном запятыми, и генерирует\##1autorefname
на лету».
Если figure=\figurename
задано, он использует имя из \figurename
и т. д., если задано только имя счетчика X
, он пытается использовать\Xname
, которое в любом случае не определено.
Поскольку я не говорю по-польски, я использовал PolishSectionName
etc. в качестве замены.
\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}
Похожая версия, определяющая \HyLang@polish
аналогично и HyLang@french
т.д.
\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}