LINUX.ORG.RU

Безобразие с кириллицей в Latex'е при использовании пакета soulutf8.

 , ,


0

2

При использовании команд \so{} \hl и т.д., из пакета soulutf8 частично пропадают русские буквы, пробема с кавычками << >>.

Имеем:

\documentclass{article}
\usepackage{ifxetex}                      %% Для сборки документа и pdflatex'ом, и xelatex'ом

\ifxetex
    %% xelatex
    \usepackage{polyglossia}                       %% загружает пакет многоязыковой вёрстки
    \setdefaultlanguage[spelling=modern]{russian}  %% устанавливает главный язык документа
    \setotherlanguage{english}                     %% объявляет второй язык документа
    \defaultfontfeatures{Ligatures={TeX}}          %% свойства шрифтов по умолчанию
    \setmainfont[Ligatures={TeX}]{CMU Serif}       %% задаёт основной шрифт документа
    \setsansfont{CMU Sans Serif}                   %% задаёт шрифт без засечек
    \setmonofont{CMU Typewriter Text}              %% задаёт моноширинный шрифт
\else
    %% pdflatex
    \usepackage{cmap}                     %% Поиск русских  слов в pdf
    \usepackage[T2A]{fontenc}             %% Внутренняя кодировка шрифта
    \usepackage[utf8]{inputenc}           %% Кодировка исходного текста
    \usepackage[english,russian]{babel}   %% Поддержка русского текста
\fi  
 
\usepackage{soulutf8}
 
\begin{document}
Начало разреженного текста => \so{start cyr <<родима я кириллица>> stop cyr} <= конец разреженного текста.
\end{document}

При сборке xelatex'ом получается раз, pdflatex'ом два.

Собственно, есть ли возможность починить данное поведение?

P.S. Пакет soul/soulutf8 используется для реализации выделения текста маркером, что мне и требуется.

Если <<такие ёлочки>> заменить на честные юникодные символы «ёлочек», то в случае pdflatex всё O'k — видимо акронимов этот пакет не переваривает. Почему себя странно ведёт xelatex — не знаю, точнее нужно разбираться, а мне лень...

Evgueni ★★★★★ ()
Ответ на: комментарий от Evgueni

случае pdflatex всё O'k

Не совсем Ок, исчезла буква «а» в слове «родима я», собственно, исчезновение букв - самый важный момент.

Jurik_Phys ★★★★★ ()
Ответ на: комментарий от Evgueni

Беда. Debian, texlive-2014.20140927-1 - не работает, обновил до 20141024-2 - тоже не работает.

Jurik_Phys ★★★★★ ()
Ответ на: комментарий от Jurik_Phys

Ну что я могу сказать? Пошли автору пакета багрепорт. Потряси его на предмет поддержки xelatex и кириллицы.

Только на всякий случай посмотри последнюю версию пакета на CTAN. Документацию тоже наверное придётся прочесть.

P.S. Надеюсь ты ёлочки заменил на юникодные аналоги?

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 3)

В общем, отписал автору с описанием проблем.

В pdflatex нет поддержки кавычек, задаваемых командами << >>. При этом пропадает последняя буква первого после начала кавычек слова, вне зависимости на каком языке слово написано.

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

Собственно, пример, можно посмотреть soul.tex, soul-pdflatex.pdf, soul-xelatex.pdf.

Собирать, соответственно,

pdflatex soul.tex
или
xelatex soul.tex.

P.S. Конечно, можно сразу utf-8 кавычки ставить «тaк», но это же неудобно.

Jurik_Phys ★★★★★ ()

Почитай документацию:

soulutf8:

This package soulutf8 does not have own options and does not define new user commands. Any option is passed to package soul [1] that is loaded first.

soul:

§2 Quotes:

Example: \so{‘‘quotes’’}
The soul package recognizes the quotes ligatures ‘‘, ’’ and ,,. The Spanish ligatures !‘ and ?‘ are not recognized and have, thus, to be written enclosed in braces like in \caps{{!‘}Hola!}.

Раз есть проблема с «Spanish ligatures» пробуем с ёлочками:

\so{start cyr {<<}родима я кириллица{>>} stop cyr}

И всё работает.

AlexVR ★★★★★ ()
Ответ на: комментарий от AlexVR

Хотя xelatex до конца не работает, но никто нам и не обещал, что эти старые пакеты в нём будут работать.

AlexVR ★★★★★ ()
Ответ на: комментарий от AlexVR
\documentclass{article}
\usepackage{ifxetex}                      %% Для сборки документа и pdflatex'ом, и xelatex'ом

\ifxetex
    %% xelatex
    \usepackage{polyglossia}                       %% загружает пакет многоязыковой вёрстки
    \setdefaultlanguage[spelling=modern]{russian}  %% устанавливает главный язык документа
    \setotherlanguage{english}                     %% объявляет второй язык документа
    \defaultfontfeatures{Ligatures={TeX}}          %% свойства шрифтов по умолчанию
    \setmainfont[Ligatures={TeX}]{CMU Serif}       %% задаёт основной шрифт документа
    \setsansfont{CMU Sans Serif}                   %% задаёт шрифт без засечек
    \setmonofont{CMU Typewriter Text}              %% задаёт моноширинный шрифт
    \usepackage{soul}
\else
    %% pdflatex
    \usepackage[utf8]{inputenc}           %% Кодировка исходного текста
    \usepackage[T2A]{fontenc}             %% Внутренняя кодировка шрифта
    \usepackage[english,russian]{babel}   %% Поддержка русского текста
    \usepackage{cmap}                     %% Поиск русских  слов в pdf
    \usepackage{soulutf8}
\fi  
 
 
\begin{document}
Начало разреженного текста => \so{start cyr {<<}родима я кириллица{>>} stop cyr} <= конец разреженного текста.
\end{document}

Проблема где-то в soul, т.к. для xelatex нужен скорее он.

AlexVR ★★★★★ ()
Ответ на: комментарий от AlexVR

Автор пакета, Heiko Oberdiek отписался.

Раз есть проблема с «Spanish ligatures» пробуем с ёлочками:

Автор пакета написал тоже самое.

\so{{<<}Раз два три{>>}}

Проблема где-то в soul, т.к. для xelatex нужен скорее он.

Именно так, плюс указание шрифта, который используется пакетом soul.

Ответ автора:

However, Cyrillic characters are already supported by package «soul». You need to change the internal font, which «soul» uses to analyze the syllables, see section «5.3 Changing the internal font» in the documentation of package «soul». For example, the following works for xelatex or lualatex:

   % XeLaTeX
  \usepackage{soul}%
  \makeatletter
  \newfontfamily\SOUL@tt{cmuntt.otf}
  \makeatother

  \so{{<<}Раз два три{>>}}
  \so{«Раз два три»}

И всё работает.

P.S. правда для выделения текста остановился на способе, который не использует soul. Из минусов, заливка идёт поверх текста из-за чего контраст самого текста снижается.

Jurik_Phys ★★★★★ ()
Ответ на: комментарий от Jurik_Phys

Из минусов, заливка идёт поверх текста из-за чего контраст самого текста снижается.

Если на базе TiKZ, то надо задействовать ещё слои. Что-то есть тут

AlexVR ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.