Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

\Hy@DisableOption in \PDF@FinishDoc is local, hence do nothing

Abierto
#97 5 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
38/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
latex, tex
Área
tooling

Línea de trabajo

Rastrea \PDF@FinishDoc, \Hy@DisableOption y las definiciones de claves de keyval y atbegshi para identificar dónde el ámbito local impide que se reemplace el controlador de opciones. Usa el documento mínimo del issue para comparar \KV@Hyp@pdftitle antes y después del primer salto de página; se considera terminado cuando el controlador está deshabilitado globalmente y posteriormente se activa \Hy@WarnOptionDisabled.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Currently, hyperref, at the time of first page break, uses \PDF@FinishDoc to set PDF info fields like pdftitle and make related options disable. After that, any key-val setting to options like pdftitle will not influence the corresponding field in the output PDF, and should raise warning \Hy@WarnOptionDisabled.

But, since

  • the \PDF@FinishDoc is executed inside commands of atbegshi package, and
  • the \define@key (provided by keyval package) used by \Hy@DisableOption only locally (re)defines key,

options like pdftitle are never disabled, hence usages after first page break won't raise any warning.

Following is a quick fix (with test by showing the meaning of \KV@Hyp@pdftitle) by providing global variant of \define@key and using it inside \PDF@FinishDoc.

  • Without fix, \KV@Hyp@pdftitle is not redefined after the first page break.
  • With the fix, \KV@Hyp@pdftitle is redefined as desired and warning \Hy@WarnOptionDisabled is raised after the first page break.
\documentclass{article}
\usepackage{hyperref}
\hypersetup{pdftitle={preamble}}

\makeatletter
%% redifined to use \define@key@g
\def\Hy@DisableOption#1{%
  \ltx@ifundefined{KV@Hyp@#1@default}{%
    \define@key@g{Hyp}{#1}%
  }{%
    \define@key@g{Hyp}{#1}[]%
  }%
  {\Hy@WarnOptionDisabled{#1}}%
}

%% add \global version of \defin@key
\def\define@key@g#1#2{%
  \@ifnextchar[{\KV@def@g{#1}{#2}}{\global\long\@namedef{KV@#1@#2}####1}}

%% add \global version of \KV@def
\def\KV@def@g#1#2[#3]{%
  \global\long\@namedef{KV@#1@#2@default\expandafter}\expandafter
  {\csname KV@#1@#2\endcsname{#3}}%
  \global\long\@namedef{KV@#1@#2}##1}
\makeatother
\listfiles


\begin{document}
%% this one succeeds in changing the Title field
\hypersetup{pdftitle={before first newpage}}
a
\newpage

%% with fix, this one raises warning
\hypersetup{pdftitle={after first newpage}}

%% check meaing of \KV@Hyp@pdftitle
\makeatletter
\ttfamily
\meaning\KV@Hyp@pdftitle
\makeatother
\end{document}

This issue is first reported, in Chinese, in https://github.com/CTeX-org/forum/issues/42.

Lenguaje dominante
TeX
Estrellas
210
Forks
41
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de latex3/hyperref

Todos los issues de latex3/hyperref

Issues similares

Más issues de DevTools

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.