.png)
babel
A opção de frenchb
torna ativo, por exemplo, !
o caractere, tornando-o automaticamente precedido por um \thinspace
. Esses caracteres ativos são devidamente suportados nas seções dos hyperref
marcadores de. Mas, quando tento criar meu próprio comando de seção com uma \addcontentsline
especificação, isso leva ao Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding)
aviso bem conhecido, conforme apontado pelo seguinte MWE:
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{hyperref}
\newcommand{\mynaivesection}[1]{%
\textbf{#1}%
\addcontentsline{toc}{section}{#1}%
}
\begin{document}
\tableofcontents
\section{Foo !}
\mynaivesection{Bar !}
\end{document}
O que está faltando no meu comando de seção personalizada (deliberadamente ingênuo) para me livrar desse aviso?
POR FALAR NISSO:
- não há nenhum aviso se eu remover
\textbf{#1}%
este comando de seção personalizada: bastante estranho... bookmark
pacote não ajuda aqui.
Responder1
Não é o hiperref que limpa o argumento. A principal diferença entre \section
e seu comando é que o \addcontentsline
é emitido para o primeiro no modo vertical. E a definição do ! depende do modo:
\french@sh@!@ ->\ifhmode \ifdim \lastskip >\z@ \unskip \penalty \@M \FBthinspace
\else \FDP@thinspace \fi \fi \string !
O aviso desaparece se você inserir um \par
(e também se não houver texto antes de \addcontentsline
você estar no vmode então):
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[]{hyperref}
\usepackage{etoolbox}
\pretocmd\addcontentsline{\ifvmode \message{V-Mode!#3}\else\message{H-Mode!#3}\fi}{}{}
\newcommand{\mynaivesection}[1]{%
#1\addcontentsline{toc}{section}{{#1}}}%
\begin{document}
\tableofcontents
\section{Foo !}
\mynaivesection{Bar!}
\renewcommand{\mynaivesection}[1]{%
#1\par\addcontentsline{toc}{section}{{#1}}}%
\mynaivesection{FooBar!}
\end{document}
Responder2
Você pode redefinir localmente \FBthinspace
para não fazer nada.
\newcommand{\mynaivesection}[1]{%
\textbf{#1}%
\begingroup%
\renewcommand{\FBthinspace}{}%
\addcontentsline{toc}{section}{#1}%
\endgroup%
}
MWE:
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{hyperref}
\newcommand{\mynaivesection}[1]{%
\textbf{#1}%
\begingroup%
\renewcommand{\FBthinspace}{}%
\addcontentsline{toc}{section}{#1}%
\endgroup%
}
\begin{document}
\tableofcontents
\section{Foo !}
\mynaivesection{Bar !}
\end{document}
Saída: