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

parencite 失去超链接 #195

Open
xkwxdyy opened this issue Apr 13, 2024 · 4 comments
Open

parencite 失去超链接 #195

xkwxdyy opened this issue Apr 13, 2024 · 4 comments

Comments

@xkwxdyy
Copy link

xkwxdyy commented Apr 13, 2024

MWE

\begin{filecontents*}{test.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{test}[2024/04/13 v0.1 Test class]
\RequirePackage{etoolbox}
\LoadClass{ctexbook}
\ExplSyntaxOn
\RequirePackage
  [
    backend      = biber,
    bibstyle     = gb7714-WHU,
    citestyle    = gb7714-WHU,
    gbfile       = true
  ]{biblatex}
\setcounter { gbrefcompress } { 3 }
% Tofix: 放在 cbx 里没效果,反而变成空白了
% https://github.com/hushidong/biblatex-gb7714-2015/issues/137
% 增加 \parencite 两篇文献之间逗号后的空格
\DeclareDelimFormat [ parencite ] { multicitedelimiter } { \addcomma\addthinspace }  % 太窄则用 addspace
% zepinglee 建议 \cite 的不加空格
\DeclareDelimFormat [ cite ] { multicitedelimiter } { \addcomma }
\RenewDocumentCommand \multicitedelim { } { \printdelim { multicitedelimiter } }

\AtEndPreamble
  {
    \RequirePackage { hyperref }
    \hypersetup 
      { 
        pdfencoding = auto,
        citecolor   = magenta,
        linkcolor   = blue,
        hidelinks
      }
  }
\ExplSyntaxOff
\end{filecontents*}

\documentclass{test}

\addbibresource{biblatex-examples.bib}

\begin{document}

\parencite{westfahl:space}

\printbibliography

\end{document}

使用 latexmk -xelatex 编译后发现 [1]没有超链接的点击效果了。

但如果调换 hyperrefbiblatex 的设置顺序:

\begin{filecontents*}{test.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{test}[2024/04/13 v0.1 Test class]
\RequirePackage{etoolbox}
\LoadClass{ctexbook}
\ExplSyntaxOn
\AtEndPreamble
  {
    \RequirePackage { hyperref }
    \hypersetup 
      { 
        pdfencoding = auto,
        citecolor   = magenta,
        linkcolor   = blue,
        hidelinks
      }
  }
\RequirePackage
  [
    backend      = biber,
    bibstyle     = gb7714-WHU,
    citestyle    = gb7714-WHU,
    gbfile       = true
  ]{biblatex}
\setcounter { gbrefcompress } { 3 }
% Tofix: 放在 cbx 里没效果,反而变成空白了
% https://github.com/hushidong/biblatex-gb7714-2015/issues/137
% 增加 \parencite 两篇文献之间逗号后的空格
\DeclareDelimFormat [ parencite ] { multicitedelimiter } { \addcomma\addthinspace }  % 太窄则用 addspace
% zepinglee 建议 \cite 的不加空格
\DeclareDelimFormat [ cite ] { multicitedelimiter } { \addcomma }
\RenewDocumentCommand \multicitedelim { } { \printdelim { multicitedelimiter } }
\ExplSyntaxOff
\end{filecontents*}

\documentclass{test}

\addbibresource{biblatex-examples.bib}

\begin{document}

\parencite{westfahl:space}

\printbibliography

\end{document}

又可以产生超链接了。

问题思考

我觉得很奇怪,按理来说 \AtEndPreamble 应该是在导言区那个部分才会执行,不应该会因为 cls的这个顺序而产生影响,除非 biblatex 里面的超链接设置也是用了 类似于 \AtEndPreamble 的设置,导致了前面失效的 MWE 中,biblatex 的设置在 hyperref 之前了。不过这是我的猜测,我不太知道原因。

如果我的 biblatex 的设置只能放在 hyperref 那个前面的话,能否修复这个问题呢?这个可能是 biblatex 的问题了,不知道胡老师有没有想法。

@hushidong
Copy link
Owner

导入biblatex时,加入选项hyperref=true,应该能解决。

@xkwxdyy
Copy link
Author

xkwxdyy commented Apr 13, 2024

导入biblatex时,加入选项hyperref=true,应该能解决。

MWE 测试可以,谢谢胡老师。我的大项目测试不行,等我有空再看看,项目太大出错也不好解决……

@hushidong
Copy link
Owner

其实,参考文献这种比较专门的项目,可以独立一些处理,不用封装的太厉害,就用一个单独文件来配置它,在tex中导入就行。

在各大高校里面,我没有深入看代码,但好像sjtu的是比较独立的。

我个人最喜欢的是nudtpaper那种老式的方式,完全没有封装,想做修改就很容易。

当然封装也有其好处,你们根据实际情况考虑就好。

@xkwxdyy
Copy link
Author

xkwxdyy commented Apr 13, 2024

其实,参考文献这种比较专门的项目,可以独立一些处理,不用封装的太厉害,就用一个单独文件来配置它,在tex中导入就行。

在各大高校里面,我没有深入看代码,但好像sjtu的是比较独立的。

我个人最喜欢的是nudtpaper那种老式的方式,完全没有封装,想做修改就很容易。

当然封装也有其好处,你们根据实际情况考虑就好。

好的谢谢胡老师提醒。其实后续 bib 的设置确实就是像您说的这样单独一个文件来管理。不过这个方面细节还很多,自己用的话可以随意点,但是要写成模板的话,考虑的还是很多的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants