2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Breqn Дублирование знаков мат. операций при переносе
Сообщение06.01.2020, 20:40 


10/04/16
4
Приветствую, коллеги.

Хотел бы обсудить возможность доработки пакета breqn с целью добавления варианта переноса выключных формул с дублированием знаков математических операций, на которых происходит перенос (желательно, чтобы еще знак умножения заменялся на крестообразный).

В самом пакете такой возможности, по всей видимости, не предусмотрено (в документации такая функциональность не указана).

Из полезных источников смог найти только следующие:

1. Пакет rumathbr.sty Дениса Рябова для переноса внутритекстовых формул
https://d-ryabov.livejournal.com/723.html?view=5843#t5843

2. Статья Михаила Гринчука, где затрагивается данная тема
http://www.tug.org/TUGboat/Articles/tb17-4/tb53grin.pdf

На данный момент мне не очень ясно, возможно ли применить тот же подход, что и в пакете rumathbr.sty Дениса Рябова, в пакете breqn или требуется другое решение.

Также отмечу, что использование пакета breqn не принципиально, подойдет любой способ, который позволит автоматически переносить простые алгебраическое формулы (инженерные расчеты) с учетом дублирования знаков.

Благодарю за внимание.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение06.01.2020, 22:53 
Заслуженный участник


09/05/13
8904
SolidWorker
Ну вот на ctan все, что вижу https://ctan.org/pkg/rmathbr
Сама не пробовала. Попробуете - расскажите, пожалуйста.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение06.01.2020, 23:06 


10/04/16
4
Этот пакет для внутритекстовых формул (в первом пункте про него как раз говорится), более того он несовместим с breqn (это указано в комментариях пакета).

Была еще такая идея: использовать amsmath - окружение с указанием \split, при этом разбиение исходного выражения делать python-скриптом (или Lua), но я нигде не могу найти подходящих библиотек и\или примеров подобной реализации.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение07.01.2020, 00:02 
Заслуженный участник


09/05/13
8904
SolidWorker в сообщении #1433734 писал(а):
более того он несовместим с breqn

Вы же сказали, Вам необязательно. Я не так поняла?

Я вот думаю, насколько вообще осмысленным действом является дублирование знаков на программном уровне, если большинство выключных окружений предполагают разбиение на строки вручную. Если не все. Так ли уж это актуально.

Впрочем, я привыкла не дублировать, поэтому, наверное, мои возражения малоинтересны.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение07.01.2020, 00:42 


10/04/16
4
Пакет rumathbr работает только для внутритекстовых формул, для выключных он не используется, поэтому сам по себе он для меня бесполезен.

Что касается этого:

Цитата:
Я вот думаю, насколько вообще осмысленным действом является дублирование знаков на программном уровне, если большинство выключных окружений предполагают разбиение на строки вручную. Если не все. Так ли уж это актуально.


то я не очень понял о чем речь. Как раз, чтобы избежать ручного переноса в математических выражениях, используются пакеты breqn или autobreak. У меня отчеты по расчетам сплошь состоят из длинных выражений, с подстановкой численных значений и прочими прелестями и в ручную делить такие выражения, это пустая трата времени. Естественно, что сами выражения генерируются в полностью автоматическом режиме, ни о каком ручном наборе формул речи не идет.

К сожалению ГОСТы на оформление (ГОСТ 2.105-95 ЕСКД, ГОСТ Р 54521-2011 и ГОСТ 1.5-2001) требуют, что бы перенос формул был с дублированием символов.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение07.01.2020, 00:55 
Заслуженный участник


09/05/13
8904
SolidWorker в сообщении #1433751 писал(а):
У меня отчеты по расчетам сплошь состоят из длинных выражений, с подстановкой численных значений и прочими прелестями

В таком случае, причина взаимонепонимания понятна: я их стараюсь избегать, при малейшей возможности: мне нужно, чтобы текст прочитали. Разные цели. ГОСТы меня мало волнуют.

Совет с новосибирским макросом я так понимаю, Вам тоже неинтересен? почему? не работает? не работает как надо?

-- 07.01.2020, 02:58 --

SolidWorker в сообщении #1433751 писал(а):
Естественно, что сами выражения генерируются в полностью автоматическом режиме, ни о каком ручном наборе формул речи не идет.

Не умею я выражения типа align переносить в автоматическом режиме.

Ладно, может, кто-то придет, кто умеет.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение07.01.2020, 01:04 


10/04/16
4
Так он для ручного разбиения подходит, но не для автоматического. С тем же результатом я могу использовать amsmath-окружение c включенным \split.

Вообще проблема заключается не в том как разделить выражение на части, а как это сделать именно в автоматическом режиме. К примеру пакет breqn делит выражение идеально, но он переносит символ операции, на котором произошел перенос, на следующую строку и не дублирует его на исходной.
У автора пакета было в планах реализовать подобное, но как-то заглохло.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение07.01.2020, 01:08 
Заслуженный участник


09/05/13
8904
Дисконнект :D
Я Вас давно поняла.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение29.01.2020, 19:40 
Заслуженный участник
Аватара пользователя


23/11/06
4171
Вставлю 5 копеек. Вот уже полтора десятка лет использую одну и ту же вставку во все преамбулы. Чья - бог весть. До сих пор хватало всегда. Точки, конечно, вручную заменять на $\times$ приходится.
Используется синтаксис LaTeX
\begingroup
\catcode`\+\active\gdef+{\mathchar8235\nobreak\discretionary{}%
 {\usefont{OT1}{cmr}{m}{n}\char43}{}}
\catcode`\-\active\gdef-{\mathchar8704\nobreak\discretionary{}%
 {\usefont{OMS}{cmsy}{m}{n}\char0}{}}
\catcode`\=\active\gdef={\mathchar12349\nobreak\discretionary{}%
 {\usefont{OT1}{cmr}{m}{n}\char61}{}}
\endgroup
\def\cdot{\mathchar8705\nobreak\discretionary{}%
 {\usefont{OMS}{cmsy}{m}{n}\char1}{}}
\def\times{\mathchar8706\nobreak\discretionary{}%
 {\usefont{OMS}{cmsy}{m}{n}\char2}{}}
\AtBeginDocument{\mathcode`\==32768\mathcode`\+=32768 \mathcode`\-=32768 }

 


Или вот тут: post680584.html#p680584

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение29.01.2020, 20:02 
Заслуженный участник
Аватара пользователя


30/01/06
72407
У меня гениальная идея!!!

Берёте выключную формулу, а внутрь неё вставляете внутритекстовую. А она автоматически разобьётся. И выглядеть это будет так, как вам и хочется. (Например, array с типом столбца p.)

-- 29.01.2020 20:06:43 --

Otta
Вообразите себе производные, рассчитанные автоматически какой-нибудь Mathematica, каждое выражение на полторы страницы.

Правда, разбиение по $+,-,=,\cdot,/$ тут не поможет до конца. Вылезут длинные знаки дроби и знаки корня. Их надо обрабатывать сильно интеллектуальнее.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение04.04.2020, 23:47 


07/06/13
23
Попробуйте такой набросок в преамбулу (выполнить после загрузки пакета breqn):

код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\makeatletter
\mathcode`\=="8000{\catcode`\==\active\gdef={\discretionary{\hbox{$\m@th\displaystyle\mathchar"303D$}}{}{}\penalty\relpenalty\mathchar"303D\relax}}
\mathcode`\+="8000{\catcode`\+=\active\gdef+{\discretionary{\hbox{$\m@th\displaystyle\mathchar"202B$}}{}{}\penalty\binoppenalty\mathchar"202B\relax}}
\mathcode`\-="8000{\catcode`\-=\active\gdef-{\discretionary{\hbox{$\m@th\displaystyle\mathchar"2200$}}{}{}\penalty\binoppenalty\mathchar"2200\relax}}
\let\orig@times=\times
\def\*{\mathbin{}%
  \mathchoice{%
      \discretionary{\hbox{$\m@th\displaystyle\orig@times$}}{\hbox{$\m@th\displaystyle\orig@times$}}{}%
    }{%
      \discretionary{\hbox{$\m@th\textstyle\orig@times$}}{\hbox{$\m@th\textstyle\orig@times$}}{}%
    }{%
      \discretionary{\hbox{$\m@th\scriptstyle\orig@times$}}{\hbox{$\m@th\scriptstyle\orig@times$}}{}%
    }{%
      \discretionary{\hbox{$\m@th\scriptscriptstyle\orig@times$}}{\hbox{$\m@th\scriptscriptstyle\orig@times$}}{}%
    }%
  \penalty\binoppenalty%
}
\gdef\times{\discretionary{\hbox{$\m@th\displaystyle\orig@times$}}{}{}\penalty\binoppenalty\orig@times\relax}
\makeatother
 


У меня на простых примерах работает. Если нужно дублировать и другие математические символы - это делается аналогично с \times в коде выше.

PS. Основная разница между переносом символов во внутритекстовых и выделенных формулах из пакета breqn состоит в том, что по во внутритекстовых формулах символ, на котором происходит перенос, остается на той же строке, а в выделенных breqn переносит его на следующую строку. Поэтому для внутритекстовых формул в пакете rmathbr достаточно вставить \discretionary после этого символа, а для breqn это нужно сделать перед ним.

PPS. Можно попробовать модифицировать пакет rmathbr, чтобы он сам определял, куда правильно вставлять дополнительный символ (добавить условие по аналогии с \if@display из amsmath), но это не такая простая работа в плане тестирования, и пока у меня на это, к сожалению, нет времени.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение05.04.2020, 08:16 
Заблокирован


16/04/18

1129
Момент, на который не обращал внимания. Прислали правку для ЖВМ, редактор потребовал умножение при переносах делать не точкой, а крестиком. Это требование какого-то ГОСТа, международная практика, или только правила, придуманные ЖВМ?

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение05.04.2020, 12:48 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Это практика по крайней мере отечественная многолетняя.
https://ru.wikipedia.org/wiki/Перенос_(типографика)#Перенос_формул

Для числовых выражений так. Если у вас умножения, например, векторов, то точки и крестики различаются по смыслу, и можно на эту тему апеллировать, что смысл выражения менять нельзя.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение05.04.2020, 14:11 


07/06/13
23
Проблема в том, что в LaTeX автоматическую замену $\cdot$ на $\times$ при переносе можно сделать только для текста, но не для формул. В пакете rmathbr есть команда \cdott, которая именно так и работает: выходит из математического режима, делает "правильный" перенос, и начинает математический режим заново. Очевидно, что с выделенными формулами такой трюк не сработает.

Можно использовать команду \*, которая обозначает "пустое" умножение, которое при переносе заменяется на $\times$. Для большинства физико-математических текстов этого достаточно

Я тут еще немного поигрался с breqn и пришел к такому коду:

код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\makeatletter
\exhyphenpenalty=\relpenalty
\relpenalty=13131
\binoppenalty=14141
\def\rel@break#1#2#3{%
  #1#2{#3}%
  \penalty-\@M%
  \mkern\eq@binoffset%
  #1#2{#3}
}
\def\bin@break#1#2#3{%
  \ifnum\lastpenalty=\z@%
    \discretionary{\hbox{$\m@th\displaystyle#1#2{#3}$}}{}{}%
    \penalty\binoppenalty%
  \fi%
  \EQ@prebin@space%
  #1#2{#3}%
}
\def\*{%
  \setbox\z@
  \hbox{\mathsurround\z@$\mkern\eq@binoffset$}
  \mathchoice{%
      \discretionary{\hbox{$\m@th\displaystyle\times$}}{\hbox{\kern\the\wd\z@$\m@th\displaystyle\times$}}{}%
    }{%
      \discretionary{\hbox{$\m@th\textstyle\times$}}{\hbox{$\m@th\textstyle\times$}}{}%
    }{%
      \discretionary{\hbox{$\m@th\scriptstyle\times$}}{\hbox{$\m@th\scriptstyle\times$}}{}%
    }{%
      \discretionary{\hbox{$\m@th\scriptscriptstyle\times$}}{\hbox{$\m@th\scriptscriptstyle\times$}}{}%
    }%
  \thinspace%
  \penalty\binoppenalty%
}
\makeatother
 


Т.е. отношения всегда разбивают формулу на строки, а бинарные операции - "по ситуации". Не идеально, но это, видимо, лучшее, чего можно достичь.

 Профиль  
                  
 
 Re: Breqn Дублирование знаков мат. операций при переносе
Сообщение05.04.2020, 14:23 
Заслуженный участник
Аватара пользователя


30/01/06
72407
dryabov в сообщении #1451532 писал(а):
Очевидно, что с выделенными формулами такой трюк не сработает.

Очевидно?
    Munin в сообщении #1437430 писал(а):
    Берёте выключную формулу, а внутрь неё вставляете внутритекстовую. А она автоматически разобьётся.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group