假小写字母和 biblatex

假小写字母和 biblatex

我正在尝试使用这个答案:假小写字母在我的 biblatex 书目中使用 Times New Roman 假小型大写字母。

由于某种原因,我收到错误消息“不正确的字母常数”。这似乎是我的文档其余部分的问题。因为链接的解决方案本身运行良好。

这是我的 MWE:

% !TEX encoding = UTF-8 Unicode
\documentclass{scrartcl}%
\usepackage[ngerman]{babel}%
\usepackage[utf8]{inputenc}%
\usepackage[T1]{fontenc}%
\usepackage{lipsum}%
\usepackage[%
backend=biber,%
bibstyle=authortitle,% BIBLIOGRAPHY
citestyle=authoryear,% CITATIONS
hyperref=true,%
backref=false,%
sorting=nty,%
maxnames=99,%
isbn=false,%
block=ragged,%
dashed=false,%
]{biblatex}
\usepackage{hyperref}
% ==========================================================
% ==========================================================
% ==========================================================
% FAKE SMALL CAPS 
\usepackage{fontspec,graphicx}
\setmainfont{Times New Roman}
%
%
%
\makeatletter
\newlength\fake@f
\newlength\fake@c
\def\fakesc#1{%
  \begingroup%
  \xdef\fake@name{\csname\curr@fontshape/\f@size\endcsname}%
  \fontsize{\fontdimen8\fake@name}{\baselineskip}\selectfont%
  \uppercase{#1}%
  \endgroup%
}
\makeatother
\newcommand\fauxsc[1]{\fauxschelper#1 \relax\relax}
\def\fauxschelper#1 #2\relax{%
  \fauxschelphelp#1\relax\relax%
  \if\relax#2\relax\else\ \fauxschelper#2\relax\fi%
}
\def\Hscale{.83}\def\Vscale{.72}\def\Cscale{1.00}
\def\fauxschelphelp#1#2\relax{%
  \ifnum`#1>``\ifnum`#1<`\{\scalebox{\Hscale}[\Vscale]{\uppercase{#1}}\else%
    \scalebox{\Cscale}[1]{#1}\fi\else\scalebox{\Cscale}[1]{#1}\fi%
  \ifx\relax#2\relax\else\fauxschelphelp#2\relax\fi}
%
\renewcommand*{\mkbibnamefamily}{\fauxsc}% 
% ==========================================================
% ==========================================================
% ==========================================================
%
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@COMMENTARY{beck.ok,
    MAINTITLE       = {Beck'scher Online-Kommentar BGB},
    SHORTTITLE      = {},
    EDITOR          = {Bamberger, Heinz Georg and Roth, Herbert and Hau, Wolfgang and Poseck, Roman},
    SHORTHAND       = {BeckOK},
    VOLUME          = {},
    TITLE           = {},
    YEAR            = {2018},
    EDITION         = {45},
    OPTIONS         = {howcited},
}

@COMMENTARY{muko.bd1,
    MAINTITLE       = {Münchener Kommentar zum Bürgerlichen Recht},
    SHORTTITLE      = {},
    SHORTHAND       = {MünchKomm},
    EDITOR          = {Säcker, Franz},
    SHORTAUTHOR     = {},
    VOLUME          = {1},
    TITLE           = {Allgemeiner Teil},
    YEAR            = {2015},
    ADDRESS         = {},
    EDITION         = {7},
    OPTIONS         = {howcited},
}

@INCOLLECTION{fs.roxin,
    AUTHOR          = {Beckemper, Katharina},
    TITLE           = {Unvernunft als Zurechnungskriterium in den „Retterfällen“},
    EDITOR          = {Manfred, Heinrich},
    BOOKTITLE       = {Strafrecht als Scientia Universalis - Festschrift f{\"u}r Claus Roxin zum 80. Geburtstag},
    SHORTTITLE      = {FS Roxin},
    YEAR            = {2011},
    PAGES           = {397--411},
    OPTIONS         = {fshowcited},
}

@ARTICLE{jus2007.881,
    author          = {Jörg Neuner},
    title           = {Was ist eine Willenserklärung?},
    journal         = {JuS},
    year            = {2007},
    pages           = {881--888},
}
%   
\end{filecontents}
\addbibresource{\jobname.bib}
%
%
%
% === merged files ====
%
%
% biblatex.cfg
% biblatex.cfg
% biblatex.cfg
%%%
\DeclareNameAlias{sortname}{family-given-bold}
\DeclareNameFormat{family-given-bold}{%
  \mkbibbold{%
    \ifgiveninits
      {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiveni}
         {\namepartprefix}
         {\namepartsuffix}}
      {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiven}
         {\namepartprefix}
         {\namepartsuffix}}%
    \usebibmacro{name:andothers}}}
% ==========================================================
% === Titel nicht kursiv ===
%
\DeclareFieldFormat*{citetitle}{#1}% Zitate: Schriftart der Titel
\DeclareFieldFormat*{title}{#1}% Titel im LitVZ
\DeclareFieldFormat*{maintitle}{#1}
\DeclareFieldFormat*{journaltitle}{#1}%
\DeclareFieldFormat*{booktitle}{#1}
%
% ==========================================================
% === kein Punkt in Library ===
%
\renewcommand{\finentrypunct}{}% Kein Punkt am Ende des Eintrags im LitVZ
% ==========================================================
% === Hrsg. ===
%
\DeclareFieldFormat{authortype}{\mkbibparens{#1}}% Authortyp in Klammern
\DeclareFieldFormat{editortype}{\mkbibparens{#1}}% Editortyp in Klammern
\DeclareFieldFormat[incollection]{editortype}{\mkbibparens{#1}}%
% ==========================================================
\DeclareDelimFormat{authortypedelim}{\addspace}% Kein Komma nach Autor
\DeclareDelimFormat{editortypedelim}{\addspace}% Kein Komma nach Editor
% ==========================================================
\DeclareDelimFormat[bib,biblist]{nametitledelim}{\addspace}%
% ==========================================================
% === Auflage/Aufl. ===
%
\DefineBibliographyStrings{german}{%
  edition          = {\ifbibliography{Auflage}{Aufl\adddot}},% 'Auflage' statt 'Aufl.'
}
% ==========================================================
% === kein S. bei @article & @incollection ===
%
\DeclareFieldFormat[article,incollection]{pages}{%
  \ifcitation
    {\mkfirstpage{#1}}
    {#1}}%
% ==========================================================
% === Erkennt Satzzeichen & setzt kein Komma ausser bei Abkurzungen ===
%
\DefineBibliographyExtras{german}{\DeclarePunctuationPairs{comma}{*}}
% ==========================================================
% === @article keine Titel zitieren ===
%
\DeclareFieldFormat[article]{citetitle}{}%
% ==========================================================
% === bei @article @incollection postnote in klammern fur seitenzahl ===
%
\AtEveryCite{%
    \DeclareFieldFormat[article, incollection]{postnote}{\mkbibparens{#1}}%
}

% ==========================================================
% === bib driver @commentary ===
%
\DeclareBibliographyDriver{commentary}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor+others/translator+others}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{maintitle+title}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{edition}
  \newunit
  \usebibmacro{location+date}%
  \newunit\newblock
  \usebibmacro{finentry}}
% ==========================================================
% === @commentary prenote position === otherwise use: https://tex.stackexchange.com/a/430758/53779
%
\DeclareCiteCommand{\footcite}[\mkbibfootnote]%
  {\ifentrytype{commentary}{}{\usebibmacro{prenote}}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{%
     \DeclareFieldFormat{bibhyperref}{####1}%
     \usebibmacro{cite}%
     \ifentrytype{commentary}
       {\textbf{\addslash}%
        \textit{\usebibmacro{prenote}}}
       {}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}
%
\DeclareCiteCommand{\cite}%[\mkbibcite]%
  {\ifentrytype{commentary}{}{\usebibmacro{prenote}}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{%
     \DeclareFieldFormat{bibhyperref}{####1}%
     \usebibmacro{cite}%
     \ifentrytype{commentary}
       {\textbf{\addslash}%
        \textit{\usebibmacro{prenote}}}
       {}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}
% ==========================================================
% === @incollection herausgeber der festschrift nicht fett ===
%
\DeclareNameAlias{ineditor}{family-given}

\newbibmacro*{bbx:in:editor}[1]{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\printnames[ineditor]{editor}%
     \setunit{\printdelim{editortypedelim}}%
     \usebibmacro{#1}%
     \clearname{editor}}
    {}}
\newbibmacro*{in:editor}{%
  \usebibmacro{bbx:in:editor}{editorstrg}}
\newbibmacro*{in:editor+others}{%
  \usebibmacro{bbx:in:editor}{editor+othersstrg}}

\DeclareBibliographyDriver{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\printdelim{nametitledelim}}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \newunit\newblock
  \usebibmacro{in:editor+others}%<----- new macro
  \newunit\newblock
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
%  \usebibmacro{editor+others}% OLD
  \newunit\newblock
  \printfield{edition}%
  \newunit
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}
% ==========================================================
% === Kommentare: zitiert als Option ===
%
\newtoggle{tnbcbx@howcited}
\DeclareEntryOption[boolean]{howcited}[true]{\settoggle{tnbcbx@howcited}{#1}}
\DeclareBibliographyOption[boolean]{howcited}[true]{\settoggle{tnbcbx@howcited}{#1}}
\DeclareTypeOption[boolean]{howcited}[true]{\settoggle{tnbcbx@howcited}{#1}}

\newbibmacro{howcited}{%
  \iftoggle{tnbcbx@howcited}
    {\iffieldundef{shorthand}
       {}
       {\setunit{\addspace}%
        \printtext[parens]{%
          \bibstring{citedas}%
          \setunit{\addcolon\space}%
          \printfield{shorthand}%
          \setunit{\addslash}%
          \bibstring[\emph]{bearbeiter}}}}
    {}}

\NewBibliographyString{bearbeiter}
\DefineBibliographyStrings{ngerman}{
  citedas    = {zitiert als},
  bearbeiter = {Bearbeiter},
}

% ==========================================================
% === Incollection zitiert als option ===
%
\newtoggle{tnbcbx@fshowcited}
\DeclareEntryOption[boolean]{fshowcited}[true]{\settoggle{tnbcbx@fshowcited}{#1}}
\DeclareBibliographyOption[boolean]{fshowcited}[true]{\settoggle{tnbcbx@fshowcited}{#1}}
\DeclareTypeOption[boolean]{fshowcited}[true]{\settoggle{tnbcbx@fshowcited}{#1}}

\newbibmacro{fshowcited}{%
  \iftoggle{tnbcbx@fshowcited}
    {\iffieldundef{shorttitle}
       {}
       {\setunit{\addspace}%
        \printtext[parens]{%
          \bibstring{citedas}%
          \setunit{\addcolon\space}%
          \begingroup
            \csuse{blx@hook@cite}%
            \csuse{blx@hook@citekey}%
            \DeclareFieldFormat{bibhyperref}{##1}%
            \printnames{labelname}%
            \setunit{\addcomma\space}%
            \printfield{shorttitle}%
          \endgroup
          }}}
    {}}

\renewbibmacro{finentry}{\usebibmacro{howcited}\usebibmacro{fshowcited}\finentry}
% ==========================================================
% ==========================================================
% ==========================================================
% mybiblatexcfg.tex
% mybiblatexcfg.tex
% mybiblatexcfg.tex
% ==========================================================
% ==========================================================
% ==========================================================
%
\renewcommand{\finentrypunct}{}% kein Punkt am Ende im LitVZ
% ==========================================================
%\renewcommand*{\mkbibnamefamily}{\fauxsc}% Autoren in Kapitaelchen
%==========================================================
\AtEveryCite{%
\renewcommand{\mkbibnamefamily}[1]{\mkbibemph{#1}}%
}%
% ==========================================================
\renewcommand*{\multinamedelim}{~\textbf{/}\space}%
  \renewcommand*{\finalnamedelim}{~\textbf{/}\space}%
% ==========================================================
\renewcommand*{\newunitpunct}{\addcomma\space}%
% ==========================================================
\renewbibmacro{in:}{% 
  \ifentrytype{article}
  {}
  {\printtext{\bibstring{in}\intitlepunct}}}
% ==========================================================
\renewbibmacro{issue+date}{%
    \printfield{issue}%
    \setunit*{\addspace}%
    \usebibmacro{date}%}%
  \newunit}
% ==========================================================
% =========== print 'Author, Journal Year, firstpage' =========
% ======================== 09.05.18 ====================
\newbibmacro*{cite:article:journal}{%
       \newunit
       \printfield{journaltitle}}
%
\newbibmacro*{cite:article:pages}{%
%\newunit%\addcomma
\printfield{pages}}
%
\newbibmacro*{cite:book:shorttitle}{%
  \printfield[citetitle]{labeltitle}}
%
\renewcommand*{\postnotedelim}{\addspace}
% ========================================================
\renewbibmacro{cite}{%
  \iffieldundef{shorthand}%
    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}%
       {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonameyeardelim}}}
       {\printnames{labelname}%
        \setunit{\printdelim{nameyeardelim}}}%
     \ifentrytype{book}
       {\setunit{\printdelim{nametitledelim}}%
        \usebibmacro{cite:book:shorttitle}}
       {}%
     \ifentrytype{article}
       {\newunit
        \usebibmacro{cite:article:journal}%
        \setunit{\addspace}%
        \usebibmacro{cite:labeldate+extradate}%
        \newunit
        \usebibmacro{cite:article:pages}}
       {}%
     \ifentrytype{incollection}
       {\setunit{\printdelim{nametitledelim}}%
        \usebibmacro{cite:book:shorttitle}%
        \newunit
        \usebibmacro{cite:article:pages}}
       {}}
    {\usebibmacro{cite:shorthand}}}
%
% ==========================================================
% ==========================================================
%
\begin{document}
%
% ==========================================================
\printbibliography[title=Literaturverzeichnis alt,heading=bibintoc]
\tableofcontents% 
% ==========================================================
Test
\footcite[399]{fs.roxin}\footcite[Wendtland][§ 240 Rn. 63]{beck.ok}\footcite[888]{jus2007.881}
%-----
\end{document}

知道哪里出错了吗?提前致谢!

答案1

如果 egreg 没有尝试为小型大写字母加载单独的字体,他的答案就会奏效。Times New Roman 具有小型大写字母功能,如果您将其更改\fauxsc为,它就可以正常工作\textsc。使用最新版本的 Times New Roman(我测试了 7.00)或 TeX Gyre Termes,根本不需要伪造小型大写字母!

在 egreg 的答案中,小型大写字母的粗细不正确的原因是,必须单独指定直立、粗体等小型大写字母字体(規劃请参阅手册第 3.1 节fontspec)。

\setmainfont{Times New Roman}[
   SmallCapsFeatures={Letters=SmallCaps, Scale=MatchUppercase},
   UprightFeatures={SmallCapsFont = TeX Gyre Termes},
   BoldFeatures={SmallCapsFont = TeX Gyre Termes Bold},
   ItalicFeatures={SmallCapsFont = TeX Gyre Termes Italic},
   BoldItalicFeatures={SmallCapsFont = TeX Gyre Termes Bold Italic}
]

正如您所见,我缩放了小型大写字体以便其高度匹配。

您还需要按照 egreg 所发布的那样,更改\fauxsc\textsc

\renewcommand*{\mkbibnamefamily}{\textsc}

我还对您的文档做了以下其他小改动:删除了现在未使用的命令,删除了fontencinputencfontspec无论如何始终使用 Unicode 编码),并添加了\usepackage{csquotes}

粗体小型大写字母现在可以正常工作并正确缩放:

参考书目采用粗体小写字母

你可能还想设置字幕的字体,例如 \setsansfont{TeX Gyre Heros}[Scale=MatchUppercase]

答案2

使用支持小写字母的 Times 克隆。如果我将字体加载更改为

\setmainfont{Times New Roman}[
  SmallCapsFont=TeX Gyre Termes,
  SmallCapsFeatures={Letters=SmallCaps},
]

并替换\fauxsc\textsc

\renewcommand*{\mkbibnamefamily}{\textsc}

我明白了

在此处输入图片描述

我认为这在印刷上是非常可疑的:整个名字应该是小写的。

相关内容