我尝试使用 BibLaTeX 在复制的引文上使用相同的脚注(具体来说,footcite),如下所示在这个答案中回答相关问题。但是,我希望它能适合我想要做的事情。我试图理解代码并修改它,但由于我对 TeX 总体上缺乏经验,所以我做不到。
在我正在写的一篇论文中,有几个重复的引用,但有时他们使用后记来引用来源的某些页面,这是不可能做到的在答案上我引用过,因为它忽略了脚注的前后注。所以我希望它能够避免在重复引用中使用前后注或两者的脚注进行多次脚注引用。
另外,我看到使用代码从答案中,如果在另一页上使用相同的脚注,它仍会在文档末尾引用。我不希望这样,因为对我来说,即使它可能对读者有用,它也占用了比我想要的更多的空间,特别是如果我使用了前几页的脚注。我不需要这个功能,但我希望它能够实现。
这是我正在编写的文档中的模板,以防我的任何修改可能会干扰所需的代码:
\documentclass{article}
\usepackage[style=apa, citestyle=ext-authoryear-comp, backend=biber]{biblatex}
\addbibresource{main.bib}
\DeclareFieldFormat*[misc]{title}{#1\nopunct} % Deletes dot between title and date in miscallaneous entries
% Replaces pp./p. with colon
\DeclareFieldFormat*{postnote}{#1}
\renewcommand{\postnotedelim}{\addcolon\addthinspace}
% Spacing between bibliography entries
\setlength{\bibitemsep}{\baselineskip}
% Reduces indentation from bibliography entries
\setlength{\bibhang}{0.5cm}
% Adds parenthesis around the date in footcite (extracted from https://tex.stackexchange.com/questions/458151/parentheses-around-year-normal-number-in-footnote-and-a-word-before-footnote)
\DeclareInnerCiteDelims{footcite}{\bibopenparen}{\bibcloseparen}
% Adds spacing between the footcite superscript and text (extracted from https://tex.stackexchange.com/questions/504573/reduce-the-space-between-inline-footnotes-style-verbose-inote)
\makeatletter
\long\def\@makefntext#1{\leavevmode
\@makefnmark\nobreak
\hskip.20em\relax#1%
}
\makeatother
% Adds spacing between footcite entries
\setlength{\footnotesep}{0.75\baselineskip}
% Adds spacing before the footcite superscript (extracted from https://tex.stackexchange.com/a/180667)
\makeatletter
\patchcmd\@footnotemark{\edef}{\,\edef}{}{}
\makeatother
\begin{document}
\noindent
This is \footcite{github_tts} a \footcite{github_espeak} template \footcite[972]{klatt_1980} from the \footcite[972]{klatt_1980} original document \footcite[742]{klatt_1987}.
\printbibliography[title=Bibliography]
\end{document}
main.bib
:
@misc{github_tts,
title = {GitHub Topics: text-to-speech},
url = {https://github.com/topics/text-to-speech},
organization = {GitHub}
}
@misc{github_espeak,
title = {GitHub: espeak-ng/espeak-ng},
url = {https://github.com/espeak-ng/espeak-ng},
organization = {GitHub}
}
@article{klatt_1980,
author = {Klatt, Dennis H.},
month = {03},
pages = {971-995},
title = {Software for a cascade/parallel formant synthesizer},
doi = {10.1121/1.383940},
volume = {67},
year = {1980},
journal = {The Journal of the Acoustical Society of America}
}
@article{klatt_1987,
author = {Klatt, Dennis H.},
month = {09},
pages = {737-793},
title = {Review of text‐to‐speech conversion for English},
doi = {10.1121/1.395275},
volume = {82},
year = {1987},
journal = {The Journal of the Acoustical Society of America}
}
顺便说一下,我还修改了 APA 引用格式,下面是修改后的apa.bbx,这是我修改的唯一文件。
答案1
据我尝试,我无法自己制作一个自动化的方法来完成此操作,如果有人能做到,我会很高兴。但我认为我不再需要自动化方法了,因为它可以 膨胀带有代码的文档。以下是我编写自动方法的尝试:
就像我说的在我的评论中,我可以将前注和后注都添加到自定义命令中,但只能添加到引文中,而不是脚注本身,并且它会在上标中显示它们。此外,就像我说的之后,我尝试更换包装,但结果却不尽如人意。
但是,我后来尝试通过将包装器与文件进行比较来修改包装器
biblatex.sty
,该文件显示了包装器中使用的命令的原始代码,但没有取得任何实际进展,除了“下标”上标和对脚注进行细微更改,你可以看到这里我的结果和我使用的代码。
现在我想到了Stack Overflow 上的答案(我想我已经找到了,但由于某种原因,我没有考虑到它)它采用了手动解决方法\footnotemark[footnote index]
,经过一些测试,我发现它满足了我所有的要求(它解决了重复引用的问题,并且脚注没有在文档末尾引用,与显示的相反在答案上我在问题中提到过这一点)。所以我认为这可能是我所渴望的明确答案。
这让我改变了我的一个自定义代码这个答案,改为:
% Adds comma between multiple footcites (extracted from https://tex.stackexchange.com/a/62091/248557 and https://tex.stackexchange.com/a/285630/248557)
\let\oldFootcite\footcite
\let\oldFootnotemark\footnotemark
\newcommand\nextToken\relax
\renewcommand\footcite[2][]{%
\oldFootcite[#1]{#2}\futurelet\nextToken\isFootciteOrFootmark}
\renewcommand\footnotemark[1]{%
\unspace\oldFootnotemark[#1]\futurelet\nextToken\isFootciteOrFootmark} % Also deletes space before the superscript through /unspace
\newcommand\isFootciteOrFootmark{%
\ifx\footcite\nextToken\textsuperscript{,}%
\else\ifx\footnotemark\nextToken\textsuperscript{,}\fi%
\fi}