Programming Taskbook

 

E-mail:

Пароль:

Регистрация пользователя   Восстановление пароля

Электронный задачник по программированию

©  М. Э. Абрамян, 1998–2011

 

Teacher Pack | Конструктор учебных заданий | Форматирование текста

PrevNext


Форматирование текста заданий

Общие сведения

В конструкторе учебных заданий PT4TaskMaker предусмотрена возможность форматирования текста заданий, а также преамбул для группы и ее подгрупп. Форматирование выполняется с помощью набора управляющих последовательностей (команд), большинство из которых имеет вид \символ.

Используя управляющие последовательности, можно выполнять следующие действия по форматированию текста в окне задачника:

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

Все описанные выше действия обеспечивают требуемое форматирование текста задания как в окне задачника, так и в html-описании данного задания. Аналогичное форматирование (в частности, использование нижних и верхних индексов) можно применять и в текстах комментариев, которые выводятся в окне задачника в разделах исходных и результирующих данных.

Кроме того, имеются управляющие последовательности, не влияющие на текст задания в окне задачника, однако обеспечивающие дополнительное форматирование этого текста (и текста комментариев для группы и ее подгрупп) в html-описании задания или группы заданий. Данные управляющие последовательности позволяют:

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

Напомним, что для вывода на экран html-страницы с описанием задания или группы заданий достаточно вызвать процедуру Task, указав в конце ее параметра (имени задания или группы заданий) суффикс #. Кроме того, html-страницы с описанием групп заданий можно генерировать с помощью модуля PT4Demo, используя кнопку в окне этого модуля.

Таблица управляющих последовательностей

Управляющие последовательности, приведенные в таблице, можно использовать в формулировках заданий (параметр S процедуры TaskText), комментариях к исходным и результирующим данным (параметр Cmt в процедурах групп Data и Result), а также в дополнительных описаниях (преамбулах) групп и подгрупп учебных заданий (параметр S в процедуре CommentText).

Управляющие последовательности, использованные в параметрах процедур групп Data и Result, влияют только на представление соответствующих комментариев в окне задачника (см. столбец «Окно задачника»). Управляющие последовательности, использованные в параметре S процедуры CommentText, обеспечивают соответствующее форматирование преамбулы к группе заданий и ее подгруппам в тексте html-страницы с описанием группы заданий (см. столбец «Html-страница»). Управляющие последовательности, использованные в параметре S процедуры TaskText, влияют на вид формулировок заданий как в окне задачника, так и в html-описаниях.

Все последовательности вида \символ, не указанные в приведенной ниже таблице, игнорируются как при выводе текста в окне задачника, так при его отображения в виде html-страницы.

В заголовках подгрупп, указываемых в процедуре CreateTask (параметр SubgroupName), а также в тексте краткого описания группы, указываемого в процедуре CreateGroup (параметр GroupDescription), управляющие последовательности не обрабатываются. При указании в этих строках управляющих последовательностей они дословно воспроизводятся и в окне задачника, и в html-описании.

Команда Описание Окно задачника Html-страница
Ссылки на другие задания данной группы
\число Имя задания из текущей группы с номером, меньшим текущего на величину указанного десятичного числа (или *********, если результирующий номер оказывается меньшим 1)
\0число Имя задания из текущей группы с номером, большим текущего на величину указанного десятичного числа (или *********, если результирующий номер оказывается большим 999)
Пробелы
\, Малый неразрывный пробел Игнорируется  
\; Средний неразрывный пробел Пробел  
~ Обычный неразрывный пробел Пробел  
\q Большой пробел Игнорируется Пробел Пробел 
\Q Двойной большой пробел Игнорируется 2 копии большого пробела
Символы
\\ Обратная косая черта (\) \ \
\& Амперсанд (&) & &
\{ Открывающая фигурная скобка ({) { {
\} Закрывающая фигурная скобка (}) } }
\~ Символ «волна» (~) ~ ~
\^ Символ «шапочка» (^) ^ ^
\_ Символ подчеркивания (_) _ _
\. Многоточие (…) ...
(три точки)
…
\= Длинное тире (—) —
\: Символ диапазона, или короткое тире (–) –
\- Символ «минус» (−) −
\< Открывающие угловые кавычки («) « &#171;
\> Закрывающие угловые кавычки (») » &#187;
\* Символ умножения (·) · &#183;
\+ Символ «плюс-минус» (±) ± &#177;
\o Символ градуса (°) ° &#176;
\x Символ «косой крест» (×) × &#215;
\a Греческая буква «альфа» (α) α &#945;
\p Греческая буква «пи» (π) π &#960;
\e Греческая буква «эпсилон» (ε) ε &#949;
\l Символ «меньше или равно» (≤) &#8804;
\g Символ «больше или равно» (≥) &#8805;
\n Символ «не равно» (≠) &#8800;
\X Символ «bullet» (•) &#8226;
\hXX, где XX — двузначное 16-ричное число Символ с кодом XX из второй половины кодовой таблицы для западноевропейских языков ANSI Latin-1 (кодовая страница 1252) Соответствующий символ &#DDD;
(DDD — десятичный код соответствующего символа в кодировке Unicode)
\HXX, где XX — двузначное 16-ричное число Символ с кодом XX Windows-шрифта Symbol Соответствующий символ &#DDD;
(DDD — десятичный код соответствующего символа в кодировке Unicode)
или
<font face="Symbol">&#DDD;</font>
(DDD — десятичное число, равное 16-ричному числу XX)
Элементы текста, зависящие от текущего языка программирования
\R Метка начала квадратного корня Sqrt(
(Pascal, VB.NET, C#)
sqrt(
(C++)
Sqr(
(Visual Basic версий 5 и 6)
(
\r Метка конца квадратного корня )
)<sup>1/2</sup>
\t Логическая константа «True» True (Pascal, Visual Basic, VB.NET)
true (C++, C#)
\f Логическая константа «False» False (Pascal, Visual Basic, VB.NET)
false (C++, C#)
\N Нулевой указатель nil (Pascal)
NULL (C++)
\O Нулевая ссылка для объекта .NET null (C#)
Nothing (VB.NET)
nil (PascalABC.NET)
Индексы
_символ Односимвольный нижний индекс Cимвол выводится как нижний индекс <sub>символ</sub>
^символ Односимвольный верхний индекс Cимвол выводится как верхний индекс <sup>символ</sup>
_{ Метка начала многосимвольного нижнего индекса Переход в режим нижнего индекса <sub>
^{ Метка начала многосимвольного верхнего индекса Переход в режим верхнего индекса <sup>
} Метка конца текущего (верхнего или нижнего) многосимвольного индекса Выход из режима индекса </sub>
или
</sup>
Выделение (в окне задачника любой режим выделения приводит к выделению полужирным шрифтом)
\B Метка начала полужирного выделения Переход в режим выделения <b>
\b Метка конца полужирного выделения Выход из режима выделения </b>
\I Метка начала курсивного выделения Переход в режим выделения <i>
\i Метка конца курсивного выделения Выход из режима выделения </i>
\S Метка начала специального выделения Переход в режим выделения <span class="ptSpecial">
\s Метка конца специального выделения Выход из режима выделения </span>
Дополнительное форматирование html-страниц (в окне задачника данные управляющие последовательности игнорируются)
{ Метка начала выделения переменной   <i>
} Метка конца выделения переменной   </i>
\M Метка начала моноширинного текста   <tt>
\m Метка конца моноширинного текста   </tt>
\| Разрыв строки   <br>
\P Начало нового абзаца   Завершается предыдущий абзац и создается абзац стиля ptTaskContinue (при использовании в формулировке задания) или ptComment (при использовании в тексте преамбулы)
\[ Метка начала абзаца с центрированием   Завершается предыдущий абзац и создается абзац стиля ptTaskCenter (при использовании в формулировке задания) или ptCommentCenter (при использовании в тексте преамбулы)
\] Метка конца абзаца с центрированием   Завершается предыдущий абзац и создается абзац стиля ptTaskContinue (при использовании в формулировке задания) или ptCommentContinue (при использовании в тексте преамбулы)
\( Метка начала абзаца с отступом   Завершается предыдущий абзац и создается абзац стиля ptTaskQuote (при использовании в формулировке задания) или ptCommentQuote (при использовании в тексте преамбулы)
\) Метка конца абзаца с отступом   Завершается предыдущий абзац и создается абзац стиля ptTaskContinue (при использовании в формулировке задания) или ptCommentContinue (при использовании в тексте преамбулы)
\J Метка начала режима выравнивания по столбцам (после нее указывается последовательность символов r, l, c, которая должна оканчиваться символом &)   <table>
\j Метка конца режима выравнивания по столбцам   </table>
& Переход к новому столбцу в режиме выравнивания по столбцам   Добавляется тег <td> с соответствующим выравниванием; для первого столбца предварительно указывается тег <tr>

Дополнительные сведения об использовании управляющих последовательностей

Необходимость в специальных командах для генерации ссылок на другие задания группы объясняется тем, что любое имеющееся задание может быть импортировано в группу с другим именем (с помощью процедуры UseTask), и поэтому все ссылки на другие задания этой группы также потребуется откорректировать, указав в них новое имя группы. Разумеется, в подобной ситуации необходимо переносить в новую группу все задания, содержащие ссылки друг на друга. Следует заметить, что разность между номерами ссылающихся друг на друга заданий не обязана быть такой же, как в исходной группе заданий. Если в новой группе задания находятся на другом «расстоянии» друг от друга, то для указания правильной ссылки достаточно внести соответствующую поправку в параметр процедуры UseTask.

Наличие нескольких видов неразрывных пробелов, не различающихся в тексте заданий и html-страниц, связано с планируемой в дальнейшем возможностью генерации текста заданий в других форматах (в частности, в формате системы TeX, в котором данные виды пробелов различаются). Приведем рекомендации по использованию неразрывных пробелов:

  • вокруг символов =, <, > указывается обычный неразрывный пробел ~; исключением являются фрагменты текста в скобках вида (> 0), в которых рекомендуется использовать малый пробел: (>\,0);
  • неразрывный пробел ~ указывается также между текстом и переменной: стороны~{a} и~{b};
  • вокруг символов + и ставится средний пробел \;;
  • символы умножения \* и деления / пробелами не обрамляются; исключением служит ситуация, когда слева и справа от символа деления указываются прописные буквы; в этом случае желательно использовать обрамление малыми пробелами.

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

TaskText('Найти корни \Iквадратного уравнения\i ' +
  '{A}\*{x}^2\;+\;{B}\*{x}\;+\;{C}~=~0, заданного', 0, 1);
TaskText('своими коэффициентами~{A}, {B}, {C} ' +
  '(коэффициент~{A} не равен~0), если известно,', 0, 2);
TaskText('что дискриминант уравнения положителен. ' +
  'Вывести вначале меньший, а затем',0,3);
TaskText('больший из найденных корней. Корни квадратного ' +
  'уравнения находятся по формуле', 0, 4);
TaskText('\[{x}_{1,\,2}~=~(\-{B}\;\+\;\R{D}\r)/(2\*{A}),\] ' +
  'где {D}~\= \Iдискриминант\i, ' +
  'равный {B}^2\;\-\;4\*{A}\*{C}.', 0, 5);

В результате обработки данной формулировки задания в окне задачника будет выведен текст:

В html-описании этот же текст будет отформатирован следующим образом:

Для указания кавычек в тексте задания следует использовать управляющие последовательности \< и \>.

Управляющие последовательности \t, \f, \N, \O для логических констант, нулевых указателей и объектов генерируют текст, зависящий от выбранного в данный момент языка программирования.

Обычные пробелы, указанные после управляющих последовательностей \q, \Q, \P, \[, \(, \], \), \| и &, учитываются только в тексте задачника (и пропускаются в тексте html-страниц).

Режим специального выделения, устанавливаемый парными командами \S и \s, в окне задачника приводит к выделению полужирным шрифтом, а в html-описании обеспечивает выделение фрагмента текста, аналогичное выделению, используемому для имени задания в начале его формулировки (в приведенном выше фрагменте html-описания так выделено имя задания «Begin39»). Данный режим рекомендуется использовать для выделения заголовков, размещаемых в начале абзаца (например, если формулировка задания завершается абзацем, содержащим указание, то с помощью специального выделения целесообразно выделить текст «Указание» в начале этого абзаца).

Команды выделения переменной { и } не влияют на ее вид в окне задачника, но обеспечивают ее выделение курсивом в тексте html-страницы. В индексах команды выделения переменной не учитываются, а любые латинские буквы в них автоматически выделяются курсивом.

В односимвольных индексах нельзя указывать управляющие последовательности для вывода специальных символов, поэтому при необходимости применения в индексах специальных символов следует использовать режим многосимвольных индексов. Метки индексов не могут быть вложенными. В индексах не допускается использование меток выделения \I, \B, \S и наоборот, внутри выделенного текста не допускается указывать индексы.

Выделенные фрагменты не могут содержать меток выделения другого вида. Режим индексов и выделения, заданный в одной процедуре TaskText или CommentText, не переносится на текст, определяемый при последующих вызовах этих процедур. Если в тексте отсутствуют команды завершения текущего режима (индексов или выделения), то режим автоматически завершается при достижении конца текста, определяемого в текущей процедуре TaskText или CommentText.

В команде начала режима выравнивания по столбцам символы r, l, c определяют способ выравнивания в каждом столбце текста (r — выравнивание по правому краю, l — выравнивание по левому краю, c — выравнивание по центру). Их количество должно быть равно числу столбцов. В каждом столбце должен быть хотя бы один непробельный символ (для пустого столбца достаточно указать малый неразрывный пробел \,).

Ввиду сложности управляющих последовательностей, связанных с выравниванием по столбцам, приведем пример их использования (пример взят из задания If26):

TaskText('Для данного вещественного~{x} найти значение ' +
  'следующей функции~{f},', 0, 1);
TaskText('принимающей вещественные значения:', 0, 2);
TaskText('\[\Jrcrl&\,&\,&       \-{x},& если {x}~\l~0,',
  26, 3);
TaskText('&{f}({x})&~=~&{x}^2,& если 0~<~{x}~<~2,', 26, 4);
TaskText('&\,&\,&        4,& если {x}~\g~2.\j\]', 26, 5);

В результате обработки данной формулировки задания в окне задачника будет выведен текст:

В html-описании этот же текст будет отформатирован следующим образом:

Команду разрыва строки \| можно использовать как в обычном тексте, так и в режиме выделения с отступом или центрированием (в режиме выравнивания по столбцам переход на новую строку выполняется автоматически). Для корректного отображения текста, выровненного по столбцам, данный текст рекомендуется дополнительно центрировать (как в приведенном выше примере) или использовать для него режим выравнивания с отступом.

Управляющая последовательность \P предназначена для разделения абзацев. В тексте, отображаемом в окне задачника, данная команда игнорируется (подобно прочим командам, связанным с разделением на абзацы). Для нее не предусмотрено парной завершающей команды, поскольку необходимые теги при переходе к новому абзацу добавляются в текст html-страницы автоматически. Пробелы после команды \P при генерации html-страницы игнорируются, однако они учитываются при отображении текста в окне задачника.

Генерация специальных символов

Используя две «универсальные» управляющие последовательности \h и \H, можно включать в текст задания или преамбулы специальные символы, входящие во вторую половину кодовой таблицы для западноевропейских языков ANSI Latin-1 (команда \h) или содержащиеся в Windows-шрифте Symbol (команда \H). После имени каждой из этих команд следует указать двузначное шестнадцатеричное число, определяющее код требуемого символа; при этом шестнадцатеричные цифры A, B, C, D, E, F можно указывать в любом регистре. Если двухсимвольный текст после команд нельзя преобразовать в шестнадцатеричное число или число не является допустимым, то команды возвращают символ «?» (знак вопроса).

В случае команды \h (символы таблицы Latin-1) допустимыми считаются числа из диапазона 128–255, за исключением кодов неотображаемых символов, например, кода неразрывного пробела 160 (A0) или «мягкого» переноса 173 (AD). Символы таблицы Ansi Latin-1 с кодами 128–159 имеют в кодировке Unicode другие значения кодов; при генерации html-описаний для этих символов используются их коды в таблице Unicode.

С помощью команды \H можно получить только часть символов, определенных в Windows-шрифте Symbol. Исключены символы, уже присутствующие в таблицах ASCII и ANSI Latin-1 (например, цифры и знаки препинания) или имеющие идентичное начертание с символами из этих таблиц (например, заглавные греческие буквы, совпадающие по начертанию с латинскими: A, B, E, H, X и т. д.). Кроме того, исключены символы с кодами 230–239 и 243–254, представляющие собой фрагменты больших скобок.

Следует заметить, что для части математических символов нельзя обеспечить их правильное отображение в каждом из трех наиболее популярных веб-браузеров (Microsoft Internet Explorer, Mozilla Firefox и Opera) без использования средств веб-программирования. В браузерах Internet Explorer и Firefox можно подключать шрифты Windows, в том числе шрифт Symbol, однако в Opera это сделать нельзя. С другой стороны, в Opera и Firefox для отображения всех стандартных математических символов достаточно указать их код в Unicode-кодировке, однако в стандартных Windows-шрифтах, используемых браузером Internet Explorer, часть символов с требуемыми кодами отсутствует. При реализации команды \H для вывода подобных символов в html-документе был выбран вариант, обеспечивающий их правильное отображение в браузере Internet Explorer (и Mozilla Firefox): для этого используется Windows-шрифт Symbol. Однако в браузере Opera (и других браузерах, не поддерживающих шрифты Windows) данные символы будут отображаться неправильно.

Примечание. Для возможности использования Windows-шрифтов в браузере Mozilla Firefox следует установить режим «Разрешить веб-сайтам использовать свои шрифты вместо установленных». Соответствующий флажок находится в окне «Шрифты», которое можно отобразить с помощью следующей последовательности действий: выполнить команду меню «Инструменты | Настройки...», в появившемся окне «Настройки» перейти на вкладку «Содержимое» и в разделе «Шрифты и цвета» нажать кнопку «Дополнительно...».

С некоторыми часто используемыми специальными символами связаны особые управляющие последовательности (см. таблицу управляющих последовательностей, раздел «Символы»). Все подобные символы правильно отображаются во всех перечисленных выше браузерах.

Хотя символ пересечения (∩, код 8745) имеется в стандартных Windows-шрифтах, прочие символы, связанные с множествами (объединение, вложение, принадлежность и т. д.), в этих шрифтах отсутствуют. Для того чтобы все обозначения, связанные с множествами, выглядели в html-документе единообразно, для отображения символа пересечения (команда \Hc7) используется соответствующий символ из шрифта Symbol.

Ниже приводятся таблицы всех символов, которые можно получить с помощью универсальных команд \h и \H. Первая таблица содержит символы, генерируемые командой \h, а вторая — символы, генерируемые командой \H. Команды из второй таблицы, связанные с теми символами, которые будут неверно отображаться в браузере Opera, выделены полужирным шрифтом.

Таблица 1. Символы, генерируемые командой \h

\h80
  \h82
\h83
ƒ
\h84
\h85
\h86
\h87
\h88
ˆ
\h89
\h8a
Š
\h8b
\h8c
Œ
  \h8e
Ž
    \h91
\h92
\h93
\h94
\h95
\h96
\h97
\h98
˜
\h99
\h9a
š
\h9b
\h9c
œ
 
\h9e
ž
\h9f
Ÿ
  \ha1
¡
\ha2
¢
\ha3
£
\ha4
¤
\ha5
¥
\ha6
¦
\ha7
§
\ha8
¨
\ha9
©
\haa
ª
\hab
«
\hac
¬
  \hae
®
\haf
¯
\hb0
°
\hb1
±
\hb2
²
\hb3
³
\hb4
´
\hb5
µ
\hb6
\hb7
·
\hb8
¸
\hb9
¹
\hba
º
\hbb
»
\hbc
¼
\hbd
½
\hbe
¾
\hbf
¿
\hc0
À
\hc1
Á
\hc2
Â
\hc3
Ã
\hc4
Ä
\hc5
Å
\hc6
Æ
\hc7
Ç
\hc8
È
\hc9
É
\hca
Ê
\hcb
Ë
\hcc
Ì
\hcd
Í
\hce
Î
\hcf
Ï
\hd0
Ð
\hd1
Ñ
\hd2
Ò
\hd3
Ó
\hd4
Ô
\hd5
Õ
\hd6
Ö
\hd7
×
\hd8
Ø
\hd9
Ù
\hda
Ú
\hdb
Û
\hdc
Ü
\hdd
Ý
\hde
Þ
\hdf
ß
\he0
à
\he1
á
\he2
â
\he3
ã
\he4
ä
\he5
å
\he6
æ
\he7
ç
\he8
è
\he9
é
\hea
ê
\heb
ë
\hec
ì
\hed
í
\hee
î
\hef
ï
\hf0
ð
\hf1
ñ
\hf2
ò
\hf3
ó
\hf4
ô
\hf5
õ
\hf6
ö
\hf7
÷
\hf8
ø
\hf9
ù
\hfa
ú
\hfb
û
\hfc
ü
\hfd
ý
\hfe
þ
\hff
ÿ
   

Таблица 2. Символы, генерируемые командой \H

\H22
"
\H24
$
\H27
'
\H2d
\H40
@
\H44
Δ
\H46
Φ
\H47
Γ
\H4c
Λ
\H50
Θ
\H51
Θ
\H53
Σ
\H56
ς
\H57
Ω
\H58
Ξ
\H59
Ψ
\H5c
\
\H5e
^
\H61
α
\H62
β
\H63
χ
\H64
δ
\H65
ε
\H66
f
\H67
γ
\H68
η
\H69
ι
\H6a
φ
\H6b
κ
\H6c
λ
\H6d
μ
\H6e
ν
\H70
π
\H71
θ
\H72
ρ
\H73
σ
\H74
τ
\H75
υ
\H76
v
\H77
ω
\H78
ξ
\H79
ψ
\H7a
ζ
\Ha1
¡
\Ha2
\Ha3
\Ha5
\Ha7
\Ha8
\Ha9
\Haa
\Hab
\Hac
\Had
\Hae
\Haf
\Hb2
\Hb3
\Hb5
µ
\Hb6
\Hb9
\Hba
\Hbb
\Hbd
\Hbe
\Hbf
¿
\Hc0
א
\Hc1
Á
\Hc2
Â
\Hc3
Ã
\Hc4
Ä
\Hc5
Å
\Hc6
Æ
\Hc7
Ç
\Hc8
È
\Hc9
É
\Hca
Ê
\Hcb
Ë
\Hcc
Ì
\Hcd
Í
\Hce
Î
\Hcf
Ï
\Hd0
Ð
\Hd1
Ñ
\Hd5
\Hd6
\Hd9
Ù
\Hda
Ú
\Hdb
Û
\Hdc
Ü
\Hdd
Ý
\Hde
Þ
\Hdf
ß
\He0
\He1
\He5
\Hf1
\Hf2
   


PrevNext

 

Рейтинг@Mail.ru

Разработка сайта:
М. Э. Абрамян, В. Н. Брагилевский

Последнее обновление:
11.10.2011