在 XeLaTeX 中用于对小型大写字母进行去标记时,accsupp 和 bibliography 存在问题

在 XeLaTeX 中用于对小型大写字母进行去标记时,accsupp 和 bibliography 存在问题

这是一个后续问题我几个月前问过的一个问题。我使用XeLaTeX带有scrbook类和 Cambria 作为字体。由于 Cambria 缺少小写字母,因此无法在 PDF 中搜索或复制/粘贴小写字母的文本。为了克服这个问题,原始\XeTeXgenerateactualtext=1可以使用原语。这很有效,但在 PDF 中搜索或标记文本时会产生奇怪且有缺陷的选择框。(正如指出的那样这里,这似乎取决于所使用的 PDF 阅读器。我使用 Acrobat Reader DC。)

因为这种行为可能会让读者感到不快(它声称文本无法复制/粘贴,尽管选择框有缺陷,但它仍能正常工作),所以我决定再试accsupp package一次解决方案。所以我重新定义了\textsc以下方式:

\let\oldtextsc\textsc
\newcommand*{\copyablesc}[1]{%
    \BeginAccSupp{%
        method=escape,
        ActualText=\detokenize{#1},%
    }%
    \oldtextsc{#1}%
    \EndAccSupp{}%
}
\renewcommand{\textsc}[1]{\copyablesc{#1}}

当在普通文本中使用小型大写字母时,这种方法效果很好。但现在我意识到,当参考书目中出现小型大写字母时,它会产生奇怪的输出,因为我将其用于名称。这是完整的 MWE:

\documentclass[%
    fontsize=11pt,%
    ngerman, 
]{scrbook}  

\usepackage{fontspec}
\setmainfont[Ligatures={NoCommon}]{Cambria}
%\XeTeXgenerateactualtext=1

\usepackage{accsupp}

\usepackage[
    backend=biber,
    bibwarn=true,
    texencoding=auto,
    bibencoding=auto,
    bibstyle=chem-angew,
    citestyle=chem-angew,
    sorting=none,
    language=german,
]{biblatex}

\ExecuteBibliographyOptions{
    doi=false,
    eprint=false,
    firstinits=true,
    isbn=true,
    maxnames=999,
    maxcitenames=2,
    pageranges=true,
    url=true,
}
% small caps for authors/editors:
\renewcommand*{\mkbibnamefamily}[1]{\textsc{#1}}

\addbibresource{MWE.bib}

\usepackage{hyperref}

% copyable small caps:
\let\oldtextsc\textsc
\newcommand*{\copyablesc}[1]{%
    \BeginAccSupp{%
        %method=pdfstringdef,
        %method=plain,
        method=escape,
        ActualText=\detokenize{#1},%
        %ActualText={#1},%
    }%
    \oldtextsc{#1}%
    \EndAccSupp{}%
}
\renewcommand{\textsc}[1]{\copyablesc{#1}}

% names in small caps:
\newcommand{\name}[1]{\textsc{#1}}

\begin{document}
\mainmatter
Die Geschwister \name{Mustermann} sind Koryphäen auf dem Gebiet der Beispiele.\cite{Buch}
Die Forschungen im Arbeitskreis um \name{Doe} bauen auf diese Erkenntnisse auf.\cite{Artikel}
\printbibliography
\end{document}

这是我的 MWE.bib:

@Book{Buch,
 author    = {Erika Mustermann and Max Mustermann},
 title     = {Das große Buch der Beispiele},
 year      = {1994},
 editor    = {Kovács János and Fulanita {de Tal}},
 edition   = {3., erw. und überarb. Aufl.},
 publisher = {Bsp-Verlag},
 location  = {Hintertupfingen},
 isbn      = {0-08150815},
}

@Article{Artikel,
 author  = {{Dampf in allen Gassen}, Hans and Normal-Verbraucher, Otto and Müller, Lieschen and Doe, Jane},
 title   = {Beispiele trivialisieren},
 journal = {Zeitschrift für belanglose Beispiele},
 year    = {2015},
 volume  = {97},
 number  = {4},
 pages   = {08--15},
 issn    = {1234-5678},
 url     = {https://www.merriam-webster.com/dictionary/example},
 urldate = {2018-03-16},
}

method=escape当我从使用for生成的 PDF 中复制参考书目accsupp并将其粘贴到 Word 中时,我得到了以下信息:

[1] E.\namepartfamily,M.\namepartfamily,《示例大书》,3.,erw。和謝謝。 Aufl.,(作者:K.\namepartfamily,F.\namepartfamily),Bsp-Verlag,Hintertupfingen,1994,\MakeLowercase {ISBN}:0-08150815。

因此,以某种方式对用于生成作者和编辑者姓名accsupp的命令进行去标记化biblatex。使用的输出method=plain类似。使用method=pdfstringdef我得到这个:

[1] E. ੡洀攀岩瀀愀爀琀昀愀洀椀氀礀 , M. ੡洀攀岩瀀愀爀琀昀愀洀椀氀礀 , Das große Buch der Beispiele, 3., erw.和謝謝。 Aufl.,(Hrsg.:K. ੡洀攀岩瀀愀爀琀昀愀洀椀氀礀,F. ੡洀攀岩瀀愀爀琀昀愀洀椀氀礀),Bsp-Verlag,Hintertupfingen,1994,䵡欀攀䰀漀眀攀爀挀愀猀攀笀䤀匀䈀一紀:0-08150815。

除了复制/粘贴之外,在 PDF 中搜索作者姓名时当然找不到。因此,ActualText=\detokenize{#1}我尝试了ActualText={#1},希望这会给我纯文本而不是命令biblatex。但是,我收到了很多错误消息,例如! Use of \\blx@imc@printfield doesn't match its definition.,但是,当我排除参考书目时,编译没有问题。所以它与它处理名称的方式! Illegal parameter number in definition of \ACCSUPP@ActualText.有关。biblatex

有人知道如何克服这个问题吗?我是否缺少 选项accsupp?您知道如何让参考书目中的小写字母可搜索和复制吗?

附言:如果有人知道如何修复选择框,\XeTeXgenerateactualtext=1请告诉我,因为这是最简单的解决方案。

答案1

抱歉,但这并不容易实现。在的参数中\textsc可以有任意命令,因此无法直接获取“实际”文本。

您将需要对正文和参考书目使用不同的命令,并且只有当您的作者姓名表现良好且不包含奇怪的内容时它才会起作用。

相关内容