我必须将我的引文分成两个列表:初步工作(自己的论文)和标准参考书目列表。标准参考书目列表的参考文献应使用阿拉伯数字编号和引用。初步工作的参考文献应使用罗马数字编号和引用。
有多个软件包可以完成类似的工作。但似乎没有一个适合我的情况。例如,软件包multibib
引入了一个很好的工具,用于创建多个引用列表并使用用户定义的命令(如)引用它们\citesec
。但是,这并不适合我的目的(我可能错了),因为:(i)在与合著者编辑文档的过程中,我们可以在不同的列表之间移动一些项目;(ii)我们希望能够引用两个列表中的项目,如\cite{Ref2, Own2}
,以获得像 [2, II] 这样的结果。这两个列表应该出现在文档的不同部分,这也很重要。
为了解决这个问题,我定义了一个thepreliminarywork
类似于环境的新环境thebibliography
。下面是我的例子:
\documentclass{report}
\makeatletter
\newenvironment{thepreliminarywork}[1]
{\chapter*{Preliminary Work}%
\@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
\list{\@biblabel{\@Roman\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@Roman\c@enumiv}}%
\sloppy
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000%
\sfcode`\.\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thepreliminarywork' environment}}%
\endlist}
\makeatother
\begin{document}
These are references to the standard bibliography list: \cite{Ref1}, \cite{Ref2}. This example works properly.
These are references to the list of preliminary papers: \cite{Own1}, \cite{Own2}. This example does not work properly since I want to get [I], [II].
I also want to write like this: \cite{Ref1, Own1}. This example also does not work properly since I want to get [1, I].
\begin{thepreliminarywork}{9}
\bibitem{Own1} The preliminary paper no. 1.
\bibitem{Own2} The preliminary paper no. 2.
\end{thepreliminarywork}
\begin{thebibliography}{9}
\bibitem{Ref1} The paper no. 1.
\bibitem{Ref2} The paper no. 2.
\end{thebibliography}
\end{document}
这会在两个引用列表中给出正确的编号。但是引用的结果\cite
总是用阿拉伯数字给出。有没有办法纠正我的代码?或者也许有一些完全替代的解决方案?
答案1
\@bibitem
您必须重新定义负责\bibcite
在文件中写入命令的内部命令.aux
;我们需要它写入\theenumiv
而不是\the\value{enumiv}
。
\makeatletter
\newenvironment{thepreliminarywork}[1]
{\chapter*{Preliminary Work}%
\@mkboth{\MakeUppercase{Preliminary work}}{\MakeUppercase{Preliminary work}}%
%%% Redefine (locally) \@bibitem
\def\@bibitem##1{\item\if@filesw \immediate\write\@auxout
{\string\bibcite{##1}{\csname the\@listctr\endcsname}}\fi\ignorespaces}%
%%%
\list{\@biblabel{\@Roman\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@Roman\c@enumiv}}%
\sloppy
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000%
\sfcode`\.\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thepreliminarywork' environment}}%
\endlist}
\makeatother
我还改变了\@mkboth
命令以在标题中生成“初步工作”。