2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 перенос формулы в текстовой моде
Сообщение21.03.2015, 21:46 
Заслуженный участник


11/05/08
31889
При автоматическом переносе формулы ТеХ выравнивает первый фрагмент до полного безобразия. Можно ли заставить его прижимать всё к краю строки?

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

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение22.03.2015, 00:06 
Заслуженный участник
Аватара пользователя


30/01/06
72188
Приведите пример, пожалуйста.

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение22.03.2015, 23:07 
Заслуженный участник


11/05/08
31889
Используется синтаксис LaTeX
$u(x,t)=\sum\limits_{k=0}^{\infty}\bigg[\left(\frac{24}{\pi^2(2k+1)^2}+
\frac{-448(-1)^k}{121\pi^3(2k+1)^3}\right)\,\cos\frac{11\sqrt{5}\,\pi(2k+1)}{4\sqrt{7}}t
+\sqrt{\frac{7}{5}}\cdot\frac{32(-1)^k-32\sin\frac{\pi(2k+1)}{3}}{11\pi^2(2k+1)^2}\sin\frac{11\sqrt{5}\,\pi(2k+1)}
{4\sqrt{7}}t+\frac{448(-1)^k}{121\pi^3(2k+1)^3}\bigg]\cos\frac{\pi(2k+1)x}{6}$
 

$u(x,t)=\sum\limits_{k=0}^{\infty}\bigg[\left(\frac{24}{\pi^2(2k+1)^2}+\frac{-448(-1)^k}{121\pi^3(2k+1)^3}\right)\,\cos\frac{11\sqrt{5}\,\pi(2k+1)}{4\sqrt{7}}t+\sqrt{\frac{7}{5}}\cdot\frac{32(-1)^k-32\sin\frac{\pi(2k+1)}{3}}{11\pi^2(2k+1)^2}\sin\frac{11\sqrt{5}\,\pi(2k+1)}{4\sqrt{7}}t+\frac{448(-1)^k}{121\pi^3(2k+1)^3}\bigg]\cos\frac{\pi(2k+1)x}{6}$

В одну строчку, естественно, никак не уместится. При автоматическом переносе ТеХ делает безумные пробелы. Разбить формулы на фрагменты вручную можно, конечно (окружив каждый фрагмент внутри фигурными скобками, и я, собственно, этот вариант и выбрал); но -- крайне уныло: я ведь их не вручную набивал, а генерировал. Причём не все формулы при генерации оказываются такими длинными, так что некоторые разбивать даже и как-то неприлично. Т.е. если формула всё-таки оказывается короткой, то видеть её разбитой -- раздражительно.

-- Пн мар 23, 2015 00:30:18 --

Если уж совсем любопытно, то исходная задачка была такой:

Используется синтаксис LaTeX
$
\begin{cases} u''_{tt}=\frac{5445}{28}\,u''_{xx}+5;\\
      u'_x\big|_{x=0}=0,\ \ \ u\big|_{x=3}=0;\\
      u\big|_{t=0}=3-x;\ \ \ u'_t\big|_{t=0}=\begin{cases}0 &\text{при } x<2,\\ 2 &\text{при } x\geqslant2.\end{cases}\end{cases}
$
 

$\begin{cases} u''_{tt}=\frac{5445}{28}\,u''_{xx}+5;\\ u'_x\big|_{x=0}=0,\ \ \ u\big|_{x=3}=0;\\ u\big|_{t=0}=3-x;\ \ \ u'_t\big|_{t=0}=\begin{cases}0 &\text{при } x<2,\\ 2 &\text{при } x\geqslant2.\end{cases}\end{cases}$

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

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение23.03.2015, 16:44 
Заслуженный участник
Аватара пользователя


30/01/06
72188
ewert в сообщении #994308 писал(а):
При автоматическом переносе ТеХ делает безумные пробелы.

Вы имеете в виду пробел в первой строчке перед $u(x,t)$?

Можно сделать так:

\noindent $u(x,t)=\sum\limits_{k=0}^{\infty}\bigg[\left(\frac{24}{\pi^2(2k+1)^2}+
\frac{-448(-1)^k}{121\pi^3(2k+1)^3}\right)\,\cos\frac{11\sqrt{5}\,\pi(2k+1)}{4\sqrt{7}}t
+\sqrt{\frac{7}{5}}\cdot\frac{32(-1)^k-32\sin\frac{\pi(2k+1)}{3}}{11\pi^2(2k+1)^2}\sin\frac{11\sqrt{5}\,\pi(2k+1)}
{4\sqrt{7}}t+\frac{448(-1)^k}{121\pi^3(2k+1)^3}\bigg]\cos\frac{\pi(2k+1)x}{6}$

Используется синтаксис LaTeX
\noindent $u(x,t)=\sum\limits_{k=0}^{\infty}\bigg[\left(\frac{24}{\pi^2(2k+1)^2}+
\frac{-448(-1)^k}{121\pi^3(2k+1)^3}\right)\,\cos\frac{11\sqrt{5}\,\pi(2k+1)}{4\sqrt{7}}t
+\sqrt{\frac{7}{5}}\cdot\frac{32(-1)^k-32\sin\frac{\pi(2k+1)}{3}}{11\pi^2(2k+1)^2}\sin\frac{11\sqrt{5}\,\pi(2k+1)}
{4\sqrt{7}}t+\frac{448(-1)^k}{121\pi^3(2k+1)^3}\bigg]\cos\frac{\pi(2k+1)x}{6}$


Команда \noindent может стоять или в начале абзаца, или в преамбуле документа.
Львовский С. М. Набор и вёрстка в системе LaTeX.
Параграфы III.9.2, III.7.6, I.2.9; II.2.2.

ewert в сообщении #994308 писал(а):
Разбить формулы на фрагменты вручную можно, конечно (окружив каждый фрагмент внутри фигурными скобками, и я, собственно, этот вариант и выбрал); но -- крайне уныло: я ведь их не вручную набивал, а генерировал.

Увы, кажется, это единственный "торный путь" для красивого разбиения формул на строки. TeX даёт много возможностей верстать вручную, но мало - для автоматической генерации. Может быть, есть какой-то пакет, не знаю.

Более того, перенос формул вручную - часто дело вынужденное. В математической типографике есть несколько правил переноса, которые TeX автоматически делать не умеет:
- при переносе знака отношения или бинарной операции, он дублируется на следующей строке (это в русской традиции, а не в американской);
- при переносе по умножению (которое написано без знака), добавляется знак умножения - обычно $\times,$ но по смыслу может и $\cdot$ ; косую дробную черту не переносят;
- при разных возможностях переноса, разбивать формулу лучше вне скобок, чем внутри; это же относится к выражениям под знаком суммы, интеграла и т. п.;
- при переносе горизонтальной дробной черты (если без этого не обойтись) можно использовать специальную нотацию (в русской традиции):
$$\begin{aligned}&\dfrac{\text{начало числителя}+{}}{\quad\text{начало знаменателя}-{}\quad}\to\\&\leftarrow\dfrac{{}+\text{конец числителя}}{\quad{}-\text{конец знаменателя}\quad}\end{aligned}$$ - при переносе большого радикала, его придётся заменить на $(\text{подкоренное выражение})^{1/2}$; (сделать аналогичные стрелочки в TeX-е затруднительно, хотя принципиально можно);
- рекомендуются отступы, визуально показывающие место оператора в начале новой строки, по отношению к предыдущей строке:
\noindent $\begin{aligned}\textstyle u(x,t)=&\textstyle \left(\frac{24}{\pi^2(2k+1)^2}+
\frac{-448(-1)^k}{121\pi^3(2k+1)^3}\right)\,\cos\frac{11\sqrt{5}\,\pi(2k+1)}{4\sqrt{7}}t
+\sqrt{\frac{7}{5}}\cdot\frac{32(-1)^k-32\sin\frac{\pi(2k+1)}{3}}{11\pi^2(2k+1)^2}\sin\frac{11\sqrt{5}\,\pi(2k+1)}
{4\sqrt{7}}t+{} \\ &\textstyle {}+\frac{448(-1)^k}{121\pi^3(2k+1)^3}\end{aligned}$

\noindent $\begin{aligned}\textstyle u(x,t)=\sum\limits_{k=0}^{\infty}\bigg[&\textstyle \left(\frac{24}{\pi^2(2k+1)^2}+
\frac{-448(-1)^k}{121\pi^3(2k+1)^3}\right)\,\cos\frac{11\sqrt{5}\,\pi(2k+1)}{4\sqrt{7}}t
+\sqrt{\frac{7}{5}}\cdot\frac{32(-1)^k-32\sin\frac{\pi(2k+1)}{3}}{11\pi^2(2k+1)^2}\sin\frac{11\sqrt{5}\,\pi(2k+1)}
{4\sqrt{7}}t+{} \\ &\textstyle {}+\frac{448(-1)^k}{121\pi^3(2k+1)^3}\bigg]\cos\frac{\pi(2k+1)x}{6}\end{aligned}$

(Ссылки:
1. Swanson E., O'Sean A., Schleyer A. Mathematics into type.
2. https://ru.wikipedia.org/wiki/Перенос_(типографика)
)

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение23.03.2015, 22:03 
Заслуженный участник


11/05/08
31889
Munin в сообщении #994568 писал(а):
- рекомендуются отступы,

Мне не нужно, чтоб было красиво, тем более чтоб "типографически" кто-то что-то рекомендовал. Мне нужно, чтоб было комфортно читать. Мне лично, или ещё каким преподам, если им вдруг понадобится для своих сугубо зловредных преподских целей.

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

Да, я могу подавить их силовым путём, разбивая явным образом формулу на куски. Но это требует искусственного усложнения программы генерации этих формул. Что есть не вполне хорошо по разным причинам.

-- Пн мар 23, 2015 23:23:03 --

(Оффтоп)

Munin в сообщении #994568 писал(а):
Команда \noindent может стоять или в начале абзаца, или в преамбуле документа.

Она ровно в начале абзаца и стояла. Я ж лишь существенный фрагмент привёл. А разделялись те фрагменты макрокомандами, включающими в себя, помимо прочего, ещё и всякие \vskip'ы вперемешку с \hrule'ми. Код-то был отладочный.

И, между кстати: не в начале абзаца эта команда тоже ничему не вредит. Она просто не даёт никакого эффекта. Что, между прочим, для отладочных целей тоже вполне полезно.


-- Вт мар 24, 2015 00:01:13 --

Munin в сообщении #994568 писал(а):
Вы имеете в виду пробел в первой строчке перед $u(x,t)$?

А, да. Нет, не в этом проблема, естественно. Ладно бы выравнивание слева или справа; и то, и другое было бы вполне приемлемо. Проблема в том, что ТеХ, зараза, вытягивает выравнивание на всю строку.

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение23.03.2015, 23:52 
Заслуженный участник
Аватара пользователя


30/01/06
72188
ewert в сообщении #994748 писал(а):
Проблема в том, что ТеХ, зараза, вытягивает выравнивание на всю строку.

Всё-таки не понимаю. Пальцем ткните. Где это - в том примере, который вы привели?

ewert в сообщении #994748 писал(а):
Мне не нужно, чтоб было красиво

Ну извините, это я "отступление в сторону" сделал, не принимайте на свой счёт.

-- 24.03.2015 00:23:25 --

ewert в сообщении #994748 писал(а):
Чтобы при сверке студенческих ответов с ответом фактическим глаза не разбегались на всю ширину страницы. А это значит, что при автоматическом переносе строки паразитно-выравнивающие пробелы внутри неё должны обязательно подавляться.

Вот на эту тему в Львовском вам могут пригодиться перечисленные параграфы и их окрестности. Например, там упомянута команда \raggedright, которая делает абзац "выравненным влево", и все растянутые пробелы - по минимуму.

Либо по Кнуту, кажется, можно переопределить вот эти определения:
в преамбуле на другие, без частей plus и minus - тогда они будут нерастяжимы и несжимаемы.

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение24.03.2015, 23:23 
Заслуженный участник


11/05/08
31889
Munin в сообщении #994803 писал(а):
там упомянута команда \raggedright, которая делает абзац "выравненным влево"

Да, это ровно то, что нужно, спасибо (у меня просто никогда не возникало потребности выравнивать по краю, а то, что в стандарте не могут не быть предусмотрены для этого средства -- как-то в голову не пришло). Однако одна существенная проблема остаётся. Хотелось бы иметь возможность управлять желательными точками переноса. Или хотя бы запретить переносить по \cdot.

-- Ср мар 25, 2015 00:37:47 --

А, Вы там намекали ещё на группировку. Тогда да, это приемлемо, вопрос снимается.

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение25.03.2015, 13:08 
Заслуженный участник
Аватара пользователя


30/01/06
72188
ewert в сообщении #995200 писал(а):
Однако одна существенная проблема остаётся. Хотелось бы иметь возможность управлять желательными точками переноса. Или хотя бы запретить переносить по \cdot.

На эту тему я ссылался на Львовского параграф II.2.2 - переносы в математических формулах. Но там сложно для меня написано, и я не могу дать конкретного совета. Кроме того, ключевые слова оттуда - можно искать в Кнуте, и погрузиться ещё глубже в технические детали и возможности.

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение25.03.2015, 21:23 
Заслуженный участник


11/05/08
31889

(Оффтоп)

Munin в сообщении #995374 писал(а):
На эту тему я ссылался на Львовского параграф II.2.2

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

 Профиль  
                  
 
 Re: перенос формулы в текстовой моде
Сообщение25.03.2015, 22:56 
Заслуженный участник
Аватара пользователя


30/01/06
72188
Окей, я тогда ещё раз даю вам эту ссылку. Может быть, там будет ещё что-то полезное, что я не пересказал здесь.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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



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

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


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

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