我当前的问题
我有一个名为的自定义环境revisions
,它使用 soul 以可定制的方式强调所有内容(请参阅上下文为什么),使用 Environ 定义。当我\parencite
在此环境中使用时,出现以下错误(直接从 vim 面板复制)。我做错了什么,如何才能让它工作?
essay.tex|22 warning| LaTeX Warning: Citation '{McTaggart1908}' on page 0 undefined on input line 22.
essay.tex|22 error| Argument of \blx@citeargs@iii has an extra }.
essay.tex|22 error| Paragraph ended before \blx@citeargs@iii was complete.
essay.tex|22 error| You can't use `end-group character }' after \the.
essay.tex|22 error| TeX capacity exceeded, sorry [main memory size=5000000]. ...}{}{}{\endgroup \blxcitecmd {parenci
essay.tex|22 error| ==> Fatal error occurred, no output PDF file produced!
|| [37] Utils.pm:209> ERROR - .auxfiles/essay.bcf is malformed, last biblatex run probably failed. Deleted .auxfiles/essay.bbl
一个最小的工作示例:
\documentclass{article}
\usepackage{environ}
\usepackage{soul}
\usepackage{biblatex}
\addbibresource{~/University/bibliography.bib}
\NewEnviron{revision}{\expandafter\ul\expandafter{\BODY}}
\title{Some Title}
\author{}
\date{}
\begin{document}
\begin{revision}
\parencite[10]{McTaggart1908}
\end{revision}
\end{document}
语境
我之所以在帖子中提到这一点,是因为我可能绕了大弯路,实际上有一种更简单的方法可以解决整个问题,完全避免上述问题。它也可能很有用。我欢迎所有想法。
我是一名学生,我主要使用 LaTeX 来写论文。我的大学要求在每篇论文的第二个修订版本中,所有修订和编辑都用下划线标出。最初(本着所见即所得的精神),我只有一个命令\rev
:
\newcommand{\rev}[1]{\ul{#1}}
但是当我在里面使用它时,它引发了与上面类似的错误\parencite
。我对 LaTeX 了解不多,但我认为也许“正确”的方法(也是 LaTeX 处理的方式)是作为环境,因此有了上面的内容。但这仍然不起作用!
答案1
答案2
这不是 的问题environ
,而是 的问题soul
。你可以试试
\ul{\parencite{McTaggart1908}}
你还会遇到同样的问题。
解决方案:使用\mbox
。我filecontents*
只是想让示例自成一体。
\begin{filecontents*}{\jobname.bib}
@article{McTaggart1908,
author={X. McTaggart},
title={Title},
journal={Journal},
year={1908},
}
\end{filecontents*}
\documentclass{article}
\usepackage{environ}
\usepackage{soul}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\NewEnviron{revision}{\expandafter\ul\expandafter{\BODY}}
\title{Some Title}
\author{}
\date{}
\begin{document}
\ul{\mbox{\parencite[10]{McTaggart1908}}}
\begin{revision}
\mbox{\parencite[10]{McTaggart1908}}
\end{revision}
\end{document}