2010-02-07 4 views
4

У меня есть многоязычный документ TeX в основном на русском языке, но я также включаю некоторые термины на английском языке в скобках, чтобы сделать читателя знакомым с международной терминологией. Например, фразаАнглийские слова перенос текста в русском языке

Два неотъемлемое свойство язык программирование - синтаксис (синтаксиса) и семантика (семантики).

который просто означает

Два атрибуты программирования языка являются его синтаксис и семантика.

выглядит

Два неотъемлемых свойства языка программирования --- \ textit {} синтаксис (\ textit {\ selectlanguage {} английский синтаксис \ selectlanguage {русский}}) и \ textit {семантика} (\ textit {\ selectlanguage {english} семантика \ selectlanguage {русский}}).

Также у меня есть \ usepackage [english, russian] {babel}.

Код выглядит слишком подробным, потому что мне нужно использовать \ selectlanguage дважды на каждом английском слове, чтобы сделать перенос. Без этого я получаю пару

Overfull \ HBox ...

сообщений, потому что TeX не может дефис английских слов, когда они появляются на концах линий.

Есть ли лучшее решение?


В ответ Алексей Malistov.

распределение MacTEX имеет несколько language.dat файлов

  • /USR/местные/texlive/2009/TEXMF-распред/источник/общий/столпотворение
  • /USR/местные/texlive/2009/TEXMF-распред/док/общий/столпотворение
  • /USR/местные/texlive/2009/TEXMF/текс/общий/конфигурации
  • /USR/местные/texlive/2009/TEXMF-вар/текс/общий/конфигурации
  • /usr/local/texlive/2009/texmf-dist/tex/lambda/config

Я не уверен, какой из них мне следует редактировать. Вероятно, один из первых двух.Они идентичны

% File : language.dat 
% Purpose : specify which hypenation patterns to load 
%   while running iniTeX 
=USenglish 
american ushyphen.tex 
=english 
UKenglish ukhyphen.tex 
=british 
french frhyphen.tex 
dutch nehyph2.tex 
german dehypht.tex 
ngerman dehyphn.tex 

Но какой?

Также нет команды initexmf. Подойдя к поиску, я узнал, что аналогом является updmap-sys. Но я не уверен ... Я боюсь испортить мою установку TeX. Пожалуйста, дайте мне правильное направление.

+0

Я думаю, что все файлы 'language.dat' должны быть изменены. –

ответ

1

Вместо того чтобы использовать \selectlanguage{} дважды, потому что это переключатель, вы можете использовать либо otherlanguage среду, или \foreighlanguage макросъемки:

\begin{otherlanguage}{english} 
    Hello world 
\end{otherlanguage} 

Или изменения инлайн как в вашем примере:

Два неотъемлемых свойства языка программирования --- \emph{синтаксис} 
(\foreignlanguage{english}{\emph{syntax}}) и \emph{семантика} 
(\foreignlanguage{english}{\emph{semantics}}). 

Фактически, если вы часто даете английские термины, вы можете определить макрос:

\newcommand{\englishterm}[1]{% 
    \foreignlanguage{english}{\emph{#1}}} 
+0

Наконец я принял этот ответ. Кстати, что-то не так с макросом. В моем случае рабочий пример выглядит как \ newcommand {\ englishterm} [1] {\ foreignlanguage {english} {\ emph {# 1}}}. В любом случае спасибо за упоминание \ foreignlanguage и macro. И еще одна вещь для людей, имеющих ту же проблему: \ sloppy command может быть очень полезной. – Wildcat

+0

К сожалению, из-за этого ... [] действительно правильные :) –

1

Вы можете добавить дискретные дефисы (\-) на каждое английское слово, если это необходимо.

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

+0

+1: Но почему среда? Qn ссылается на использование в горизонтальном режиме; '\ def \ russeng # 1 # 2 {# 1 (\ textit {\ selectlanguage {english} синтаксис \ selectlanguage {русский}}}}' будет делать трюк гораздо менее громоздко. –

+0

Anon, спасибо за упоминание дискреционных дефисов. – Wildcat

1

Я считаю, что \selectlanguage должны следовать обычным правилам видимости, так что вы можете вложить часть, которую вы хотите быть английским в фигурных скобках, которые разграничивают локальную область видимости:

Два неотъемлемых свойства языка программирования --- \textit{синтаксис} 
({\textit{\selectlanguage{english}syntax}}) и \textit{семантика} 
({\textit{\selectlanguage{english}semantics}}). 

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

+1

Спасибо, Сванте! Работает отлично. – Wildcat

2

Вы должны объединить английские и русские дефисы. Измените файл language.dat, добавив следующее:

ruseng ruenhyph 
=russian 
=english 

И перекомпилировать все файлы формата:

initexmf --dump 

Добавить

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

  1. Вы должны добавить «новый язык ruseng», который содержит английские и русские гипны. Затем не требуется макрос \setlanguage. Это работает для меня очень хорошо. Я использую русские и английские слова и не использую \setlanguage.

  2. Необходимо перекомпилировать файлы форматов. MikTeX содержит команду initexmf. Я уверен, что есть аналогичная команда для вашего MacTeX.

+0

Ooops. Я не упоминал, что использую MacTeX. Простите за это. Я добавил некоторую информацию в свое сообщение. – Wildcat

+0

Наконец я сделал это. Команда, которую я использовал, была «sudo texconfig init». Благодарю. – Wildcat

Смежные вопросы