Biblatex BibliographyOption 带有括号吗?

Biblatex BibliographyOption 带有括号吗?

对于特定的 biblatex 样式,我声明了一个采用名称的参考书目选项,例如

\DeclareBibliographyOption{myname}{\edef\somename{#1}}

现在,如果此选项的值由括号组成,则 LaTeX 会产生错误,例如myname=M{\"u}ller

! You can't use `macro parameter character #' in horizontal mode.
\@removeelement #1#2#3->\def \reserved@a ##1,#1,##
                                                  2\reserved@a {##1,##2\rese...

l.59 \ProcessOptions\relax

有没有办法解决这个问题?如果没有,有没有办法扩展宏,使括号消失?我的目标是通过 测试字符串等效性,如果与 进行比较,\ifdefstring则测试返回 false ,如下所示M{\"u}llerM\"uller

\edef\x{M{\"u}ller}
\edef\y{M\"uller}
\ifdefstrequal{\x}{\y}{TRUE}{FALSE}

它将返回FALSE

答案1

你不能\edef在这个上下文中使用:\edef\x{...\"u...}will总是失败。

如果你的文件使用 UTF-8 编码,并且作者可以出现在三种格式中

M{\"u}ller
M\"uller
Müller

那么这些宏就可以是你想要的:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}

\makeatletter
\def\stripbraces#1#2{%
  \begingroup
  \def\IeC##1{##1}%
  \protected@edef\@tempa{#1}%
  \gdef\@gtempa{}%
  \expandafter\@stripbraces\@tempa\@nil
  \endgroup
  \let#2\@gtempa
}
\def\@stripbraces#1{%
  \ifx#1\@nil\else
    \expandafter\gdef\expandafter\@gtempa\expandafter{\@gtempa#1}%
    \expandafter\@stripbraces
  \fi
}

\makeatother

\begin{document}

\stripbraces{M\"uller}{\x}
\stripbraces{M{\"u}ller}{\y}
\stripbraces{Müller}{\z}

\ifdefstrequal{\x}{\y}{TRUE}{FALSE}

\ifdefstrequal{\x}{\z}{TRUE}{FALSE}

\ifdefstrequal{\y}{\z}{TRUE}{FALSE}

\stripbraces{Øre}{\x}
\stripbraces{{\O}re}{\y}
\stripbraces{\O re}{\z}

\ifdefstrequal{\x}{\y}{TRUE}{FALSE}

\ifdefstrequal{\x}{\z}{TRUE}{FALSE}

\ifdefstrequal{\y}{\z}{TRUE}{FALSE}

\stripbraces{Gauß}{\x}
\stripbraces{Gau{\ss}}{\y}
\stripbraces{Gau\ss}{\z}

\ifdefstrequal{\x}{\y}{TRUE}{FALSE}

\ifdefstrequal{\x}{\z}{TRUE}{FALSE}

\ifdefstrequal{\y}{\z}{TRUE}{FALSE}

\end{document}

所有测试结果均为“TRUE”。

Fran{\c{c}}ais但是这对于和来说会失败Fran{\c c}ais。因此最终答案取决于您的需求。

答案2

尝试使用 unicode bib 选项

\newcommand\testuni{}
\DeclareBibliographyOption[boolean]{test-unicode}[false]{
\ifstrequal{#1}{

相关内容