![平均能量损失](https://linux22.com/image/430993/%E5%B9%B3%E5%9D%87%E8%83%BD%E9%87%8F%E6%8D%9F%E5%A4%B1.png)
我如何使用修改后的版本biblatex-chicago
(以符合期刊的风格伊斯兰国)由@moewe 提供这里在命令的页面字段中使用某些个人宏时\cite
?
尤其是该杂志伊斯兰国要求在页码范围前加上“p./pp.” 。引用页码范围时,我经常添加行号、段落号和注释引用。例如,如果我引用第 42 页的第 3 条注释,我会写\cite[42 \note 3]{...}
,并输出以下所需输出(用于简短的书籍引用):
作者,标题,第 42 页注 3
为了使事情变得更加复杂,我有时会参考打印尾注的页面(以节省读者的时间),例如\cite[42 \note 3 printed on \pa 250]{...}
:
作者,标题,第 42 页注 3 印于第 250 页
我在页面字段中经常使用的个人宏有:
\newcommand{\Line}[1]{\mbox{\textsubscript{#1}}}
\newcommand{\Lines}[2]{\mbox{\textsubscript{#1-#2}}}
\newcommand{\Linebot}[1]{\mbox{\textsubscript{⌂#1}}} % line number, counting from bottom
\newcommand{\Linesbot}[2]{\mbox{\textsubscript{⌂#1-⌂#2}}} % line range both counting from bottom
\newcommand{\Linestopbot}[2]{\mbox{\textsubscript{#1-⌂#2}}} % line range first from top, second from bottom
\newcommand\note{n.\unspace~} % note
\newcommand\notes{nn.\@ } % notes
\newcommand\para{¶} % paragraph
\newcommand\paras{¶}%{¶¶} % paragraphs
\newcommand\Para{¶} % Paragraph
\newcommand\Paras{¶}%{¶¶} % Paragraphs
\newcommand\pa{p.\unspace~} % page
\newcommand\pp{pp.\@\xspace} % pages
(另请参阅下面的 MWE。)
我期望的输出是,即使使用了这些宏,也要保留前缀“p./pp。”,但当我的页面引用实际上不包含页码时则不然,例如,当我引用没有页码的注释时\cite[\note 3]{...}
:
作者,标题,注 3
[\S 4]
(或者当我单独引用某个章节或段落时也类似[\para 7]
)。
这可能吗?我试过摆弄\PagesCheckSetup
、\NumCheckSetup
和\DeclareNumChars
,但显然我不明白它们到底是如何工作的。
平均能量损失
\documentclass{article}
\usepackage{xspace}
\usepackage[notes]{biblatex-chicago}
% My macros
\xspaceaddexceptions{\ccc \Line \Lines \Linebot \Linesbot \Linestopbot}
\newcommand{\Line}[1]{\mbox{\textsubscript{#1}}}
\newcommand{\Lines}[2]{\mbox{\textsubscript{#1-#2}}}
\newcommand{\Linebot}[1]{\mbox{\textsubscript{⌂#1}}} % line number, counting from bottom
\newcommand{\Linesbot}[2]{\mbox{\textsubscript{⌂#1-⌂#2}}} % line range both counting from bottom
\newcommand{\Linestopbot}[2]{\mbox{\textsubscript{#1-⌂#2}}} % line range first from top, second from bottom
\newcommand\note{n.\unspace~} % note
\newcommand\notes{nn.\@ } % notes
\newcommand\para{¶} % paragraph
\newcommand\paras{¶}%{¶¶} % paragraphs
\newcommand\Para{¶} % Paragraph
\newcommand\Paras{¶}%{¶¶} % Paragraphs
\newcommand\pa{p.\unspace~} % page
\newcommand\pp{pp.\@\xspace} % pages
% moewe's earlier solution
\DeclareFieldFormat{jourvol}{\mkbibitalic{#1}}
\DeclareFieldFormat{journum}{\mkbibparens{#1}}%
\renewbibmacro*{cjournal+issue+year+pages}{%
\ifentrytype{periodical}%
{\usebibmacro{cperiodical+ser+vol+num}}%
{\usebibmacro{cjournal+ser+vol+num}}}
\renewbibmacro*{cjournal+ser+vol+num}{%
\usebibmacro{journal+sub}%
\setunit*{\addspace}%
\printlist[periodplace]{location}%
\setunit*{\addspace}%
\iffieldundef{series}%
{}%
{\newcunit%
\printfield[jourser]{series}%
\newcunit}%\setunit*{\addspace}?
\newcunit
\iffieldundef{issue}%
{\usebibmacro{number+or+month}}%
{\printfield{issue}%
\setunit{\addspace}%
\usebibmacro{cmsyear}}%
\newcunit
\printfield[jourvol]{volume}%
\printfield[journum]{number}%
\setunit{\postvolpunct}}% Moved eid for 17th ed.
\DefineBibliographyStrings{english}{
thiscite = {on},
}
\AtEveryCitekey{\savefield{postnote}{\cbxsavepostnote}\clearfield{postnote}}
\DeclareFieldFormat{pages}{%
\ifboolexpr{%
togl {cms@comprange}%
and
test {\ifpages{#1}}%
}%
{\mkpageprefix[bookpagination][\mkcomprange]{#1}}%
{\mkpageprefix[bookpagination][\mknormrange]{#1}}}
\DeclareFieldFormat[article,periodical]{pages}{%
\ifboolexpr{%
togl {cms@comprange}%
and
test {\ifpages{#1}}%
}%
{\mkcomprange{#1}}%
{\mknormrange{#1}}}
\DeclareFieldFormat{postnote}{%
\ifboolexpr{%
togl {cms@comprange}%
and
test {\ifpages{#1}}%
}%
{\mkpageprefix[pagination][\mkcomprange]{#1}}%
{\mkpageprefix[pagination][\mknormrange]{#1}}}
\renewbibmacro*{postnote}{%
\restorefield{postnote}{\cbxsavepostnote}%
\iffieldundef{postnote}
{}
{\setunit{\addcomma\space}%
\iftoggle{cms@fullnote}
{\iffieldundef{pages}
{}
{\iffieldpages{postnote}
{\bibstring{thiscite}%
\setunit{\addspace}}
{}}}
{}%
\printfield{postnote}}}
% MY ADDITION IN AN ATTEMPT TO KEEP PAGE REFS
%\PagesCheckSetup{\def\Line{}\def\Lines{}\def\pa{}\def\pp{}}
%\NumCheckSetup{\def\Line{}\def\Lines{}\def\pa{}\def\pp{}}
%\DeclareNumChars{}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{westfahl:space}.
\mancite
\cite[32]{westfahl:space}.
\mancite
\cite[32\Lines{3}{9}]{westfahl:space}.
\mancite
\cite[32 \note 3]{westfahl:space}.
\end{document}
电流输出:
期望输出的最后三行是:
Westfahl,《真正的边疆》,第 32 页。Westfahl
,《真正的边疆》,第 32 页_{3-9}。Westfahl
,《真正的边疆》,第 32 页注 3。
其中_{...}
代表下标。
答案1
我认为我同意 Ulrike 在这个问题下的评论:这可能有点过头了。
您可以通过在\NumCheckSetup
\NumCheckSetup{%
\def\Line#1{}%
\def\Lines#1#2{}%
\def\pa{}%
\def\pp{}%
\def\Linebot#1{}%
\def\Linesbot#1#2{}%
\def\Linestopbot#1#2{}%
}
接受参数的命令应该将其参数用于测试。我们必须使用,因为使用您的后记格式,该字段将通过几个不同的、、测试\NumCheckSetup
进行传输,并且所有这些测试都需要结果为真。\ifpages
\ifnumerals
\ifnumeral
但只有当您隐藏的命令总是与正常页码一起出现时,此方法才有效。隐藏的命令将被忽略,然后正常页码将接管。
biblatex
目前的页面格式化、数字检查等实现无法区分大小写
\cite[32 \note 3]{westfahl:space}
和
\cite[\note 3]{westfahl:space}
要么两者都得到“p.”,因为\note
实际上被忽略了,要么两者都得不到“p.”,因为这\note
使得这成为一个非数字的后记。
我认为,只要您处理的是更复杂的后记,而不仅仅是单页或简单的页面范围,您就必须自己接管整个格式化。biblatex
只能为您做这么多。为该工作定义一组一致且可用的命令并使用它们。