我正在尝试使用这个答案:假小写字母在我的 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}
我还对您的文档做了以下其他小改动:删除了现在未使用的命令,删除了fontenc
和inputenc
(fontspec
无论如何始终使用 Unicode 编码),并添加了\usepackage{csquotes}
。
粗体小型大写字母现在可以正常工作并正确缩放:
你可能还想设置字幕的字体,例如 \setsansfont{TeX Gyre Heros}[Scale=MatchUppercase]
。