分离两个不含包的列表的引用

分离两个不含包的列表的引用

我必须将我的引文分成两个列表:初步工作(自己的论文)和标准参考书目列表。标准参考书目列表的参考文献应使用阿拉伯数字编号和引用。初步工作的参考文献应使用罗马数字编号和引用。

有多个软件包可以完成类似的工作。但似乎没有一个适合我的情况。例如,软件包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命令以在标题中生成“初步工作”。

相关内容