结论

结论

我用法语写作,所以我使用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}

在此处输入图片描述

相关内容