Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ctex: hyperref 设置 driverfallback=driverfallback 在 beamer 中被忽略 #715

Open
1 task done
KongJingC001 opened this issue Jun 24, 2024 · 4 comments
Open
1 task done

Comments

@KongJingC001
Copy link

KongJingC001 commented Jun 24, 2024

检查清单

  • 我已在 issues 中进行搜索(包括已关闭的问题)

操作系统

Windows 11 家庭中文版 版本号23H2操作系统版本22631.3737

TeX 发行版

TeX 3.141592653 (TeX Live 2023)

描述问题

使用latexmk编译tex文件时发生的问题,以下是引用的包

\documentclass[11pt]{beamer}

\usepackage{lmodern}
\usepackage{multicol}
\usepackage{caption}
\usepackage{graphicx}
\usepackage[UTF8]{ctex}

警告信息

Package hyperref Warning: Option `driverfallback' has already been used,
(hyperref)                setting the option has no effect on input line 493.

使用xelatex,并没有出现警告
猜测是CTex多次加载hyperref

最小工作示例(MWE)

\documentclass[11pt]{beamer}

\usepackage{lmodern}
\usepackage{multicol}
\usepackage{caption}
\usepackage{graphicx}
\usepackage[UTF8]{ctex}

\begin{document}

\begin{frame}
  test
\end{frame}

\end{document}

链接

No response

其他信息

No response

附件

No response

@muzimuzhi
Copy link
Contributor

muzimuzhi commented Jun 24, 2024

使用latexmk编译tex文件时发生的问题

使用xelatex,并没有出现警告

是用 pdflatex 时产生这个警告。

latexmk 是一个 latex 自动编译工具,可被设置为使用任一引擎,默认使用 pdflatex。

猜测是CTex多次加载hyperref

更像是因为多次设置了 \hypersetup{driverfallback = ...}。只是警告,可以忽略。

@muzimuzhi
Copy link
Contributor

hyperref 的 driverfallback 选项只能在加载宏包时使用(从 hyperref.sty 里可以看到,在包末尾,如果 driverfallback 的值非空,hyperref 会按此加载 driver,然后再禁用包括 driverfallback 在内的一些宏包选项),所以例子能简化为(在各引擎下均可得到前述警告)

\documentclass{article}
\usepackage{hyperref}
\hypersetup{driverfallback=dvipdfmx}
\begin{document}
content
\end{document}

因为 beamer.cls 已经加载了 hyperref,所以之后加载的 ctex 里就没法设置 driverfallback = dvipdfmx 了。如果用 pdflatex 编译时选择生成 dvi 而非 pdf,那么被忽略的 driverfallback = dvipdfmx 设置确实会带来问题。如果直接生成 pdf,没事。

@muzimuzhi muzimuzhi transferred this issue from CTeX-org/forum Jun 24, 2024
@muzimuzhi muzimuzhi changed the title Beamer: Latexmk Warnning about Package CTex for Package hyperref ctex: hyperref 设置 driverfallback=driverfallback 在 beamer 中被忽略 Jun 24, 2024
@KongJingC001
Copy link
Author

感谢您的回复,已了解该警告

@muzimuzhi
Copy link
Contributor

因为 beamer.cls 已经加载了 hyperref,所以之后加载的 ctex 里就没法设置 driverfallback = dvipdfmx 了。如果用 pdflatex 编译时选择生成 dvi 而非 pdf,那么被忽略的 driverfallback = dvipdfmx 设置确实会带来问题。如果直接生成 pdf,没事。

ctex 里的相关逻辑需要调整。如调整为:

  • 如果 hyperref 未加载,使用 \PassOptionsToPackage
  • 如果已加载,也许能检测一下加载的 driver,如果不是 dvipdfmx 则给个警告

ctex-kit/ctex/ctex.dtx

Lines 6801 to 6809 in de93018

\@ifpackageloaded { hyperref }
{
\cs_new_protected:Npn \ctex_hypersetup:n #1
{ \hypersetup {#1} }
}
{
\cs_new_protected:Npn \ctex_hypersetup:n #1
{ \PassOptionsToPackage {#1} { hyperref } }
}

\ctex_hypersetup:n { driverfallback = dvipdfmx }

@muzimuzhi muzimuzhi reopened this Jun 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants