我用法语写作,所以我使用babel
。我想使用prettyref
来避免写“Section”和 co。
问题是我不能用法语babel
。它让我:
! Paragraph ended before \@prettyref was complete.
<to be read again>
\par
l.36
?
以下是 MWE:
\documentclass{article}
\usepackage{prettyref}
% Form package, just for info.
\makeatletter
\def\prettyref#1{\@prettyref#1:}
\def\@prettyref#1:#2:{%
\expandafter\ifx\csname pr@#1\endcsname\relax%
\PackageWarning{prettyref}{Reference format #1\space undefined}%
\ref{#1:#2}%
\else%
\csname pr@#1\endcsname{#1:#2}%
\fi%
}
\makeatother
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\begin{document}
\section{Introduction}\label{sec:intro}
See \prettyref{fig:defs}
\section{Definitions}\label{sec:defs}
See \prettyref{sec:conclusion}
\section{Conclusion}\label{sec:conclusion}
See \prettyref{sec:intro} and \prettyref{fig:defs}. With prettyref we simply write \verb|\prettyref{sec:intro}| to get \prettyref{sec:intro}.
\end{document}
结论
好的!对于所有在这里看的法国人来说,您不能定义这样的标签fig:a
。一旦使用自动引用包,这就会引发问题。
原因是:
“字母”在法语中变成了主动字符babel
,从而导致了所有这些问题:
cleveref
我所做的是与类似的标签一起使用fig-a
。
感谢大家 !
答案1
您可以使其prettyref
兼容babel-french
(但修复仅适用于它)。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{prettyref}
% fix \prettyref to first detokenize its argument
% kudos to daleif for proposing the simplification
\makeatletter
\def\prettyref#1{\expandafter\@prettyref\detokenize{#1:}}
\makeatother
\begin{document}
\section{Introduction}\label{sec:intro}
See \prettyref{fig:defs}
\section{Definitions}\label{sec:defs}
See \prettyref{sec:conclusion}
\section{Conclusion}\label{sec:conclusion}
See \prettyref{sec:intro} and \prettyref{fig:defs}. With prettyref we
simply write \verb|\prettyref{sec:intro}| to get \prettyref{sec:intro}.
\begin{figure}[htp]
\caption{caption}\label{fig:defs}
\end{figure}
\end{document}
另一方面,varioref
和的组合cleveref
会更稳健。但是,cleveref
不喜欢主动冒号,但不依赖于精确的标签命名方案,因此您可以使用任何其他分隔符(但要避免使用法语特殊标点符号)。优点是prettyref
您可以决定是否使用\ref
(仅数字)、\cref
(带类型)或\vref
(带类型和对页面的引用)。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{varioref,cleveref}
\crefname{figure}{figure}{Figure}
\begin{document}
\section{Introduction}\label{sec-intro}
See \vref{fig-defs}
\section{Definitions}\label{sec-defs}
See \cref{sec-conclusion}
\section{Conclusion}\label{sec-conclusion}
See \cref{sec-intro} and \cref{fig-defs}. With cleveref we
simply write \verb|\vref{sec-intro}| to get \vref{sec-intro}.
\clearpage
\begin{figure}[htp]
\caption{caption}\label{fig-defs}
\end{figure}
\end{document}