Проблема с дублированием содержимого при вызове одного и того же миксина в Jade/Pug возникает из-за особенностей работы данного шаблонизатора.
Jade/Pug обрабатывает миксины таким образом, что при каждом вызове миксина в шаблоне, он заменяется его содержимым. Это означает, что если содержимое миксина включает другие элементы шаблона, то они также будут включены в результате каждого вызова этого миксина.
Например, рассмотрим следующий пример:
mixin box .box p Content +box +box
В этом примере у нас есть миксин "box", который создает блок div с классом "box" и вложенным абзацем. Затем мы вызываем этот миксин дважды. Ожидаемо, что мы получим два блока div с абзацем внутри каждого из них. Но на самом деле, из-за замены содержимого миксина при каждом вызове, у нас будет два идентичных блока div с абзацем в каждом из них, то есть содержимое миксина будет дублировано.
Чтобы избежать этого дублирования, вам нужно разделить содержимое миксина на несколько блоков и вызывать только нужные блоки при каждом вызове. Для этого в Jade/Pug используется директива блока "block" и оператор "yield".
Приведем пример правильного использования блоков:
mixin box .box block content +box block content p Content 1 +box block content p Content 2
В этом примере у нас также есть миксин "box" с блоком "content". Но в этом случае мы используем директиву блока и оператор "yield" для передачи разного содержимого в каждом вызове. В результате мы получим два блока div с разным содержимым внутри каждого из них, а дублирования не произойдет.
Таким образом, чтобы избежать дублирования содержимого при вызове миксина в Jade/Pug, вам необходимо разделить содержимое миксина на блоки и вызывать только нужные блоки при каждом вызове, используя директиву блока "block" и оператор "yield".