LINUX.ORG.RU

Длинное имя Java-класса и переносы

 


0

1

Вопрос к программистам на Java (да и не только), использующим LaTeX. Допустим нужно упомянуть длинное имя класса в тексте. например, org.apache.commons.dbcp.basicdatasource. Как сделать так, чтобы оно красиво переносилось по строкам? Мне удалось сделать только перенос по точкам.

\usepackage{xstring}
\newcommand*{\javapackage}[1]{\foreignlanguage{english}{\texttt{\StrSubstitute{#1}{.}{.\allowbreak}}}}

Но как научить его переносить слово «basicdatasource»? Добавление

\hyphenation{ba-sic-da-ta-so-ur-ce}
не помогает, а добавить имя класса целиком я не могу (LaTeX ругается на то, что точка - не символ алфавита).

Проблем ещё добавляет использование \texttt (внутри него текст не желает переносится, а рекомендованный пакет hyphenat с параметром [htt] не очень дружит с \foreignlanguage)

А что мешает просто по месту ставить точки переноса «\-»? Вряд-ли таких мест много и текст в любом случае как минимум раз в конце проглядеть нужно.

Проблема, как я понимаю в точках. Аналогичная проблема есть и c тире в случае сложных слов, типа дельта"=функция. Из-за этого вместо тире нужно ставить «=. Иными словами в худшем случае следует организовать подобный механизм самостоятельно и вместо точки вставлять что-то вроде ».

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

Спасибо за наводку про «=. Поискал по документации на babel и сделал примерно так:

\makeatletter
%\declare@shorthand{russian}{".}{\penalty\@M.\hskip\z@skip}  %Такую штуку StrSubstitute не съедает
\newcommand*{\javadot}{\penalty\@M.\hskip\z@skip}
\makeatother
\usepackage[htt]{hyphenat}
\hyphenation{
    %словарь переносов
}
\newcommand*{\javapackage}[1]{\texttt{\StrSubstitute{#1}{.}{\javadot}}}

Хотелось бы ещё чтобы оно английские правила переноса использовала там где может, но через \foreignlanguage (как в певром сообщении) не получилось (оно не переносило даже по вручную заданным правилам).Пробовал обрамлять словарь переносов в \begin{hyphenrules}{english} и \end{hyphenrules} — не помогло. Возможно потому что авторы пакета hyphenat определяют свой язык под названием \langwohyphens.

В общем, проблема решена, благодарю за помощь (и, пользуясь случаем, за статьи в LXF:)

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