LINUX.ORG.RU

Как русифицировать siunitx?

 ,


1

1

Вспомнил, что хотел в нескольких файлах заменить свои топорные единицы измерения (через \text{}) на siunitx. Вот тут нашёлся файлик для конфигурации, положил его рядом с исходными текстами. Но куда, собственно, ставить \usepackage{siunitx}?

Как обычно, есть кодировки и babel:

\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian,english]{babel}
Ставлю после них — получаю
Symbol font `TS1letters' is not defined. ...Symbol \c__siunitx_minus_tl { TS1 } { 61 }

Ставлю до них — получаю не те символы: \SI{1,23}{\micro\meter} превращается в 1 . 23 РёРәРё. Где я ошибаюсь?

Ответ на: комментарий от anonymous

Не, не помогает. Если добавить TS1, такое ощущение, что перестаёт работать T2A:

Symbol font `TS1letters' is not defined. ...Symbol \c__siunitx_minus_tl { TS1 } { 61 }
Symbol font `TS1letters' is not defined. ...xtSymbol \c__siunitx_mu_tl { TS1 } { 181 }
Command \CYRF unavailable in encoding TS1. \end{frame}
Command \CYRO unavailable in encoding TS1. \end{frame}
Command \CYRT unavailable in encoding TS1. \end{frame}

И так далее, по всей кириллице.

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

У меня с русским работает если указать так:

\usepackage{siunitx} % Provides the \SI{}{} command for typesetting SI units, набор значений единиц измерения
\sisetup{range-phrase=--,range-units = single,locale = DE,mode=text} % no-russian :((
Потом так: \SIrange{1}{2}{~\text{ч}}

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

Да, работает. Вот такой пример собирается:

\documentclass[a4paper]{scrartcl}

\usepackage{siunitx}
\usepackage{cmap}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian,english]{babel}

\begin{document}
	Рабочий диапазон длин волн \SIrange{1.2}{23.5}{\micro\meter}.
\end{document}

Но, соответственно, без конфига на выходе получается Рабочий диапазон длин волн 1.2 μ m to 23.5 μ m ., а с ним Рабочий диапазон длин волн 1.2 РёРәРё to 23.5 РёРәРё.

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

~\text{ч}

Тю, так я наоборот хочу повыбрасывать \text{}. А иначе зачем мне siunitx как таковой.

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

А если siunitx после babel поставить?

Или же поставить \DeclareSIUnit\metre{\text{м}} после siunitx?

Конфиг же по сути tex файл который подключается пакетом.

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

Похоже, конфиг сохранился в левой кодировке. Если прямиком в тот пример, что выше, вбить в преамбулу

\DeclareSIUnit\metre{\text{м}}
\DeclareSIUnit\meter{\text{м}}
\DeclareSIPrefix\micro{\text{мк}}{-6}
то на выходе будет уже 1.2 мкм to 23.5 мкм. Осталось с запятыми-точками разобраться.

UPD: Нет, vim показывает fileencoding=utf-8, но в TeXstudio из конфига кириллица копировалась неправильно.

al_exquemelin ★★★
() автор топика
Последнее исправление: al_exquemelin (всего исправлений: 2)
Ответ на: комментарий от al_exquemelin

Похоже, конфиг сохранился в левой кодировке.

Я про тоже подумал.

P.S.vim может многое говорить, надо смотреть в HEX. При интенсивном обмене win системами, однажды мне прилетел файл, в котором latex ругался на все команды, после определенной строки. В итоге оказалась смесь utf8 и cp1251.

einhander ★★★★★
()
Последнее исправление: einhander (всего исправлений: 2)
Ответ на: комментарий от einhander

Не, пересохранил через TeXstudio этот siunitx.cfg — всё равно РёРәРё. Ерунда какая-то: из преамбулы самого файла работает, из внешнего конфига — нет.

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

Тут ещё вопрос, может, сталкивался: \sisetup{inter-unit-product = \cdot} можно глобально объявить, или каждый раз нужно \SI[inter-unit-product = \cdot]{}{}? У меня что-то ни так, ни так не хочет пахать. Пишу \SI{e4}{\cm^2 \per (\volt \second)} — получаю см2 / (Вс), без точки. Что не так?

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

У меня заработало вот так:

\sisetup{...
inter-unit-product = \ensuremath{{}\cdot{}},
...}

\si{\second \volt} дает с · V

UPD. А \si{\meter \per {\second \volt}} дает m/сV

UPD2. \si{\meter \per \second \per \volt}, вот так правильно будет. Или если нужна дробь то \si[per-mode=fraction]{\meter \per \second \per \volt}. Это обработчик команды \per так старается.

einhander ★★★★★
()
Последнее исправление: einhander (всего исправлений: 2)
Ответ на: комментарий от einhander

У меня заработало вот так

Так вот и я так же делал вчера, вроде.

\si{\meter \per \second \per \volt}

Это у меня давало м/с/В. Где-то была опция, чтобы отключить такой вариант, надо ещё вечером повозиться.

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

Твой исходник и конфиг siunitx.cfg оба в одной кодировке (UTF-8), что правильно. Но так как обработка символов, не помещающихся в ASCII, в inputenc реализована сложным образом (они объявляются активными и ведут себя как команды TeX), то всё-всё-всё, что содержит в себе кириллицу в каком угодно виде, должно подключаться после inputenc. Вот такой вариант работает:

\documentclass[a4paper]{scrartcl}
\usepackage{cmap}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{siunitx}
\usepackage[russian,english]{babel}
\begin{document}
Рабочий диапазон длин волн \SIrange{1.2}{23.5}{\micro\meter}.
\end{document}
А ещё я мог бы посоветовать переходить потихоньку на более современные движки, например на LuaTeX. В нём не нужны inputenc и fontenc, и рабочий код может выглядеть так, скажем:
\documentclass[a4paper]{scrartcl}
\usepackage{fontspec}
\setmainfont{CMU Serif}[Ligatures=TeX]
\usepackage{siunitx}
\usepackage[russian,english]{babel}
\begin{document}
Рабочий диапазон длин волн \SIrange{1.2}{23.5}{\micro\meter}.
\end{document}

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

Не-а, поставил \usepackage{siunitx} между inputenc и babel — получил опять Symbol font `TS1letters' is not defined. ...Symbol \c__siunitx_minus_tl { TS1 } { 61 }.

А ещё я мог бы посоветовать переходить потихоньку на более современные движки, например на LuaTeX.

Ага, пока травка подрастёт... В общем, пока я соберусь осваивать новый движок, для меня наверняка пропадёт необходимость что-то делать на LaTeX.

al_exquemelin ★★★
() автор топика
Последнее исправление: al_exquemelin (всего исправлений: 1)
Ответ на: комментарий от al_exquemelin

Наверное мне надо было сказать «у меня так заработало» на TeXlive 2016. Не исключено, что у тебя версии пакетов другие, и в этом дело. Покажи лог-файл.

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

Вот весь файл. Вот где вылезают ошибки:

! LaTeX Error: Symbol font `TS1letters' is not defined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.78 ...Symbol \c__siunitx_minus_tl { TS1 } { 61 }
                                                  
Your command was ignored.
Type  I <command> <return>  to replace it with another command,
or  <return>  to continue without it.


! LaTeX Error: Symbol font `TS1letters' is not defined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.92 ...xtSymbol \c__siunitx_mu_tl { TS1 } { 181 }
                                                  
Your command was ignored.
Type  I <command> <return>  to replace it with another command,
or  <return>  to continue without it.

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

Это ты компилируешь какой-то совсем другой код. Поэтому всё ещё трудно сказать, в чем дело. так что во-первых, скомпилируй тот маленький примерчик из моего предыдущего сообщения и скажи, работает ли (и если не работает, то покажи лог-файл). Во-вторых, покажи свой большой файл. Я так понимаю, это слайды в beamer? Выложи преамбулу и один слайд, который ломается. Может, дело ещё в чем-то.

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

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

preamble.tex:

\PassOptionsToPackage{unicode}{hyperref}
\documentclass[aspectratio=169,russian]{beamer}

\usepackage{cmap}
\usepackage{textcomp}
\usepackage{amsmath,amssymb,mathtext,amsfonts,wasysym}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{siunitx}
\sisetup{output-decimal-marker = {,}}
\sisetup{inter-unit-product = \cdot,
	range-phrase = \ensuremath{{} \ldots {}},
	range-units = single,
	exponent-product = \cdot}
\usepackage[russian,english]{babel}

\renewcommand{\epsilon}{\varepsilon}
\renewcommand{\phi}{\varphi}

\usepackage{multirow}

\usepackage{graphicx,xcolor}

\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\convertlen}{ O{cm} m }
{
   \dim_to_decimal_in_unit:nn { #2 } { 1 #1 } cm
}
\ExplSyntaxOff

\graphicspath{ {./fig/} }
\newcommand{\executeiffilenewer}[3]{%
	\ifnum\pdfstrcmp{\pdffilemoddate{#1}}%
	{\pdffilemoddate{#2}} > 0 {\immediate\write18{#3}}\fi}
\newcommand{\includesvg}[1]{%
	\executeiffilenewer{#1.svg}{#1.pdf}%
	{inkscape -z -D --file=#1.svg %
	--export-pdf=#1.pdf --export-latex}%
	\inputencoding{utf8}
	\input{#1.pdf_tex}%
}

\usetheme[hideallsubsections,width=4.6em]{Goettingen}

\mode<presentation>{\usecolortheme{rose}}
\mode<article>{\usecolortheme{dove}}

sample.tex:

\input{preamble.tex}

\title[ФОТОГАЛЬВА-НИЧЕСКИЕ ПРИЁМНИКИ ИЗЛУЧЕНИЯ]%
{ФОТОГАЛЬВАНИЧЕСКИЕ ПРИЁМНИКИ ИЗЛУЧЕНИЯ} 
\subtitle{Тема 7}
\date{}

\begin{document}
	\begin{frame}\frametitle{Особенности конструкции}
		Быстродействующие ФД Шоттки с малой площадью контакта \SIrange{e-5}{e-4}{\cm^2} и, 
		следовательно, малым временем релаксации \(t_{0rc} = r_и c_б \simeq \SI{e-12}{\s}\) могут 
		иметь инерционность порядка десятков пс. При этом целесообразно применение полупроводников с 
		высокой подвижностью электронов (\(\ge \SI{e4}{\cm^2 \per (\volt \second)}\)): 
		GaAs, InAs, GaInAs.
	\end{frame}
\end{document}

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

Во, лучшее, чего удалось добиться: \SI[sticky-per]{e4}{\cm\squared \per \volt \second} даёт точки и степени. У парсера, похоже, аллергия на ^2, а со \squared срабатывает.

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

Странно всё это. Видимо, beamer не делает ничего с кодировкой TS1, а scrartcl где-то ею пользуется, поэтому она определена и siunitx не ругается (внутрь не смотрел, так что точной причины не назову).

Напиши

\usepackage[TS1,T2A]{fontenc}

вместо

\usepackage[T2A]{fontenc}

Должно заработать.

TeopeTuK ★★★★
()
Ответ на: комментарий от TeopeTuK
line 285: TeX capacity exceeded, sorry [input stack size=5000]. \end{frame}

Это что-то новенькое (возникает и для одного слайда, который я выше показывал, и для всей презентации).

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

Ох, как же тебе не везёт-то... Покажи полный лог. На всякий лучай выложу свой: sample.log и sample.tex (я объединил твои примеры, но это вряд ли могло повлиять на собираемость). Конфиг siunitx.cfg как склонировался, так и лежит рядом безо всяких изменений.

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

Да ладно, если объявлять в преамбуле единицы, то работает же.

Вот весь лог. Вот чем он заканчивается:

! TeX capacity exceeded, sorry [input stack size=5000].
\textrightarrow ->\TS1-tmcmd \textrightarrow 
                                             \TS1\textrightarrow \TS1math\te...
l.23 	\end{frame}
                 
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.

 
Here is how much of TeX's memory you used:
 31001 strings out of 494440
 591420 string characters out of 6173199
 591154 words of memory out of 5000000
 33749 multiletter control sequences out of 15000+600000
 19507 words of font info for 52 fonts, out of 8000000 for 9000
 430 hyphenation exceptions out of 8191
 5000i,8n,59p,10411b,883s stack positions out of 5000i,500n,10000p,200000b,80000s
!  ==> Fatal error occurred, no output PDF file produced!

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

UPD: Ага, capacity exceeded получается при добавлении TS1 и, похоже, не зависит от siunitx.cfg.

al_exquemelin ★★★
() автор топика
Последнее исправление: al_exquemelin (всего исправлений: 1)
Ответ на: комментарий от al_exquemelin

Не могу найти в логе ничего необычного, увы. Может быть и правда какой-то баг в более ранних версиях, который в текущем TeXLive 2016 уже починен...

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

Да ладно, шут с ним. Вообще, у меня тут мысль, что кому-нибудь пора сесть и написать локаль, чтобы при подключении пакета достаточно было указать locale = RU. Составляющие ведь уже есть. Ещё нашёлся бы этот кто-нибудь.

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