Совет: не делай этого.Размещение символа QED напрямую зависит от содержания вашего текста в вашей среде.Например, код Андреа потерпит неудачу, если ваша теорема заканчивается отображением математики.Вам, вероятно, придется иногда размещать его вручную, и вы вряд ли будете упускать из виду вещи, если будете всегда это делать.
Гораздо лучше было бы иметь среду, которая жаловалась бы, если символ QED не был размещен.Вы можете сделать это, задав флаг qedused, скажем, \newififqedused
, который не устанавливается при входе в среду (определите оболочку, используя \newenvironment
, как сказал Андреа), установите в оболочку вокруг символа QED и протестируйте, когда вывыйти из среды.Если флаг все еще не установлен при выходе, введите \PackageWarning
или \PackageError
.
Если вы действительно хотите попытаться получить среду qed, которая изо всех сил пытается делать правильные вещи, независимо от того, что находится вокружении, вам нужно просмотреть содержимое \lastbox
, чтобы попытаться определить, куда должен идти символ QED.Если это hbox, вы в порядке, просто поместите QED согласно решению Андреаса.Если это mbox, то я думаю, что создание hbox, содержащего этот mbox, за которым следует символ QED, должно сработать - я не уверен, я обычно не связываюсь с набором математики.Если это vbox, вам нужно заглянуть внутрь структуры vbox, чтобы найти, куда он должен идти, что звучит сложно - я не могу думать, как это сделать в чистом тексте. В Luatex я думаю, что хитрость Ханса Хагена в Способ LuaTEX: \ framed может быть адаптирован для этого.