amsrefs 命令有撇号吗?

amsrefs 命令有撇号吗?

我的问题可能很愚蠢,但我已经使用 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(应该是文档)?它可能更能满足您的需求,并且可能有一个用户级钩子可用于获取您需要的更改,而无需深入到包的内部。

相关内容