我的问题可能很愚蠢,但我已经使用 LaTeX 有一段时间了,到目前为止我遇到的所有命令要么由纯字母组成,要么由字母和“at”符号组成 --> @
。
但是当我尝试使用该amsrefs
包自定义我的参考书目时,我注意到在amsrefs.pdf
文档(版本 2.14,2013/03/07)中,一些命令有撇号,如\bib'author
,\bib'editor
等。请我展示以下 MWE1:
\documentclass{article}
\usepackage[nobysame,author-year]{amsrefs}%
\makeatletter
\renewcommand*{\PrintEditorsA}[1]%
{%
\ifx\previous@primary\current@primary
\sameauthors{(Ed\Plural{s}.)}%
\else
\def\current@bibfield{\bib'editor}%
\PrintNames{}{ (Ed\Plural{s}.)}{#1}%
\fi%
\erase@field\bib'editor%
}%
\makeatother
\begin{document}
\cite{mybookkey1}
\begin{bibdiv}
\begin{biblist}
\bibselect{sampledb}
\end{biblist}
\end{bibdiv}
%contents of sampledb.ltb
%
%\documentclass{article}
%\usepackage{amsrefs}
%\begin{document}
%\begin{bibdiv}
%\begin{biblist}
%\bib*{mykey-not-citable}{book}{
%editor={von Last1, First, Jr.},
%editor={von Last2, First, Jr.},
%editor={von Last3, First, Jr.},
%title={Title of Book},
%}
%\bib{mybookkey1}{book}{
%xref={mykey-not-citable}
%}
%\end{biblist}
%\end{bibdiv}
%\end{document}
\end{document}
在这个 MWE1 中,我试图修改 的定义\PrintEditorsA
(在amsrefs.pdf
文档第 99 页找到),以便“eds。”将变为“Eds。”(它将变为大写)。出于某种原因,MWE1 无法按原样编译。但是,当我注释掉包含 的行时\bib'editor
,它已经可以编译了。但我确信这些行很重要,所以我不想随意注释掉行。因此,它让我得出结论,也许包含撇号(\bib'editor
例如)的命令导致了问题。我可以知道我的错误吗?
贝多芬14
答案1
该amsrefs.sty
包确实使用了'
命令名,但这不是什么大问题。
Editor
如果你想将“eds.”改为“Eds.”,在包中查找,你会找到对宏的引用\PrintEditorA
,\PrintEditorB
和\PrintEditorC
,以及它们的定义
\newcommand{\PrintEditorsC}[1]{%
\PrintNames{Edited by }{}{#1}%
}
\newcommand{\PrintEditorsA}[1]{%
\ifx\previous@primary\current@primary
\sameauthors{(ed\Plural{s}.)}%
\else
\def\current@bibfield{\bib'editor}%
\PrintNames{}{ (ed\Plural{s}.)}{#1}%
\fi
\erase@field\bib'editor
}
\newcommand{\PrintEditorsB}{%
\PrintNames*{(}{\SwapBreak{,}~ed\Plural{s}.)}%
}
您可以在文档序言中通过以下方式修改它们
\makeatletter
\catcode`'=11
\renewcommand{\PrintEditorsA}[1]{%
\ifx\previous@primary\current@primary
\sameauthors{(Ed\Plural{s}.)}%
\else
\def\current@bibfield{\bib'editor}%
\PrintNames{}{ (Ed\Plural{s}.)}{#1}%
\fi
\erase@field\bib'editor
}
\newcommand{\PrintEditorsB}{%
\PrintNames*{(}{\SwapBreak{,}~Ed\Plural{s}.)}%
}
\catcode`'=12
\makeatother
您还可以使用补丁程序做更多简单的工作:
\usepackage{etoolbox}
\catcode`'=11
\patchcmd{\PrintEditorsA}{ed\Plural}{Ed\Plural}{}{}
\patchcmd{\PrintEditorsA}{ed\Plural}{Ed\Plural}{}{}
\patchcmd{\PrintEditorsB}{ed\Plural}{Ed\Plural}{}{}
\catcode`'=12
答案2
'
在名称中使用是为了防止用户乱用这些命令。如果你查看amsrefs.sty
,你会看到他们\catcode`\'=11
在文件中设置允许在命令名称中使用撇号。鉴于这种不寻常的设置,我会特别警惕乱用这些命令。你看过用户文档了吗amsrefs
(应该是文档)?它可能更能满足您的需求,并且可能有一个用户级钩子可用于获取您需要的更改,而无需深入到包的内部。