Объявления в латекс с UTF-8 (или, по крайней мере, немецкие умляуты)
Попытка включить исходный файл в мой латексный документ с использованием пакета листингов, у меня проблемы с немецкими умляутами внутри комментариев в коде.
Использование
\lstset{
extendedchars=\true,
inputencoding=utf8x
}
Umlauts в исходных файлах (закодированных в UTF-8 без спецификации) обрабатываются, но они каким-то образом перемещаются в начало слова, в котором они содержатся.
Так
// die Größe muss berücksichtigt werden
в исходном исходном файле, становится
// die ößGre muss übercksichtigt werden
в выходном файле.
ПРИМЕЧАНИЕ: поскольку я обнаружил ошибки в моей начальной настройке, я сильно отредактировал этот вопрос
Ответы
Ответ 1
ok, теперь найдем подходящее обходное решение:
чтобы включить символ utf8 для отображения символа latin1
- Преобразование окончаний строк исходного файла из окон (\ r\n) в unix (\n)
- пользоваться
Я знаю, что это уродливо во многом, но это единственное решение, которое работает для меня до сих пор.
Ответ 2
Я нашел более простой подход, который работает для меня:
\usepackage{listings}
\lstset{
literate={ö}{{\"o}}1
{ä}{{\"a}}1
{ü}{{\"u}}1
}
Ответ 3
Только для комментариев вы можете использовать опцию texcl
:
\lstset{language=C++,texcl=true}
Чем ваши комментарии станут латексными, а вы можете использовать "специальные" символы
\begin{lstlisting}
int iLink = 0x01; // Paramètre entrée
\end{lstlisting}
Ответ 4
Это должно работать и для других языков (испанский, датский):
\documentclass[
a4paper, %% defines the paper size: a4paper (default), a5paper, letterpaper, ...
12pt %% set default font size to 12 point
]{scrartcl} %% article, see KOMA documentation (scrguide.dvi)
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{listings}
\lstset{language=Pascal}
\lstset{literate=%
{Ö}{{\"O}}1
{Ä}{{\"A}}1
{Ü}{{\"U}}1
{ß}{{\ss}}2
{ü}{{\"u}}1
{ä}{{\"a}}1
{ö}{{\"o}}1
}
\begin{document}
[Latex: kann man Umlaute in lstlisting verwenden?]
\begin{lstlisting}
Test für Umlaut äöü ÄÖÜ ß So geht es
\end{lstlisting}
\end{document}
Ответ 5
Мой вклад в чешский язык.
\lstset{
inputencoding=utf8,
extendedchars=true,
literate=%
{á}{{\'a}}1
{č}{{\v{c}}}1
{ď}{{\v{d}}}1
{é}{{\'e}}1
{ě}{{\v{e}}}1
{í}{{\'i}}1
{ň}{{\v{n}}}1
{ó}{{\'o}}1
{ř}{{\v{r}}}1
{š}{{\v{s}}}1
{ť}{{\v{t}}}1
{ú}{{\'u}}1
{ů}{{\r{u}}}1
{ý}{{\'y}}1
{ž}{{\v{z}}}1
{Á}{{\'A}}1
{Č}{{\v{C}}}1
{Ď}{{\v{D}}}1
{É}{{\'E}}1
{Ě}{{\v{E}}}1
{Í}{{\'I}}1
{Ň}{{\v{N}}}1
{Ó}{{\'O}}1
{Ř}{{\v{R}}}1
{Š}{{\v{S}}}1
{Ť}{{\v{T}}}1
{Ú}{{\'U}}1
{Ů}{{\r{U}}}1
{Ý}{{\'Y}}1
{Ž}{{\v{Z}}}1
}
Ответ 6
Мой вклад в бразильский португальский.
\lstset{%
inputencoding=utf8,
extendedchars=true,
literate=%
{é}{{\'{e}}}1
{è}{{\`{e}}}1
{ê}{{\^{e}}}1
{ë}{{\¨{e}}}1
{É}{{\'{E}}}1
{Ê}{{\^{E}}}1
{û}{{\^{u}}}1
{ù}{{\`{u}}}1
{ú}{{\'{u}}}1
{â}{{\^{a}}}1
{à}{{\`{a}}}1
{á}{{\'{a}}}1
{ã}{{\~{a}}}1
{Á}{{\'{A}}}1
{Â}{{\^{A}}}1
{Ã}{{\~{A}}}1
{ç}{{\c{c}}}1
{Ç}{{\c{C}}}1
{õ}{{\~{o}}}1
{ó}{{\'{o}}}1
{ô}{{\^{o}}}1
{Õ}{{\~{O}}}1
{Ó}{{\'{O}}}1
{Ô}{{\^{O}}}1
{î}{{\^{i}}}1
{Î}{{\^{I}}}1
{í}{{\'{i}}}1
{Í}{{\~{Í}}}1
}
Ответ 7
Работает для большинства изо-символов. (в том числе шведский åäöÅÄÄÖ, который мне нужен)
\usepackage[utf8]{inputenc}
\usepackage{listings}
\lstset{literate=
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
{à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
{À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
{ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
{Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
{â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
{Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{€}{{\EUR}}1 {£}{{\pounds}}1
}
источник: http://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings#Encoding_issue
Ответ 8
Упрощенный подход для французского.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{listings}
\lstloadlanguages{R}
\lstset{language=R}
\lstset{%
inputencoding=utf8,
extendedchars=true,
literate=%
{é}{{\'{e}}}1
{è}{{\`{e}}}1
{ê}{{\^{e}}}1
{ë}{{\¨{e}}}1
{û}{{\^{u}}}1
{ù}{{\`{u}}}1
{â}{{\^{a}}}1
{à}{{\`{a}}}1
{î}{{\^{i}}}1
{ô}{{\^{o}}}1
{ç}{{\c{c}}}1
{Ç}{{\c{C}}}1
{É}{{\'{E}}}1
{Ê}{{\^{E}}}1
{À}{{\`{A}}}1
{Â}{{\^{A}}}1
{Î}{{\^{I}}}1
}
\begin{document}
\begin{lstlisting}
# Est-ce que ça marche : é ê è à Â Ê É Î ç Ç
x<-rnorm(100,0,10)
plot(density(x))
\end{lstlisting}
\end{document}
Ответ 9
Прекрасно работает для меня!
Мои 2 цента для французской стороны:
\[email protected] {"C0}{\`{A}}
\[email protected] {"C1}{\'{A}}
\[email protected] {"C2}{\^{A}}
\[email protected] {"C4}{\"{A}}
\[email protected] {"C7}{\c{C}}
\[email protected] {"C8}{\`{E}}
\[email protected] {"C9}{\'{E}}
\[email protected] {"CA}{\^{E}}
\[email protected] {"CB}{\"{E}}
\[email protected] {"CE}{\^{I}}
\[email protected] {"CF}{\"{I}}
\[email protected] {"D4}{\^{O}}
\[email protected] {"D6}{\"{O}}
\[email protected] {"D9}{\`{U}}
\[email protected] {"DB}{\^{U}}
\[email protected] {"E0}{\`{a}}
\[email protected] {"E1}{\'{a}}
\[email protected] {"E2}{\^{a}}
\[email protected] {"E4}{\"{a}}
\[email protected] {"E7}{\c{c}}
\[email protected] {"E8}{\`{e}}
\[email protected] {"E9}{\'{e}}
\[email protected] {"EA}{\^{e}}
\[email protected] {"EB}{\"{e}}
\[email protected] {"EE}{\^{\i}}
\[email protected] {"EF}{\"{\i}}
\[email protected] {"F4}{\^{o}}
\[email protected] {"F6}{\"{o}}
\[email protected] {"F9}{\`{u}}
\[email protected] {"FB}{\^{u}}
Ответ 10
Шведская версия:
\lstset{literate=%
{å}{{\r{a}}}1
{ä}{{\"a}}1
{ö}{{\"o}}1
{Å}{{\r{A}}}1
{Ä}{{\"A}}1
{Ö}{{\"O}}1
}
Ответ 11
Я могу подтвердить, что решение, предоставленное Яношем, работает почти правильно.
В моем случае мне нужно было использовать испанские символы: á, é, í, ó, ú, ñ, Á, É, Í, Ó, Ú и пробовал его решение без результатов, пока я не скомпилировал свой файл с xelatex вместо pdflatex.
В любом случае вы должны изменить listing.sty в локальной копии или непосредственно в общем файле и добавить следующее:
\[email protected]
\[email protected] {"23}\#
\[email protected]{"24}\textdollar
\[email protected] {"25}\%
\[email protected] {"26}\&
%spanish letters coded in UTF
\[email protected] {"E1}{\'a}
\[email protected] {"C1}{\'A}
\[email protected] {"E9}{\'e}
\[email protected] {"C9}{\'E}
\[email protected] {"ED}{\'i}
\[email protected] {"CD}{\'I}
\[email protected] {"F3}{\'o}
\[email protected] {"D3}{\'O}
\[email protected] {"FA}{\'u}
\[email protected] {"DA}{\'U}
\[email protected] {"F1}{ñ}
\[email protected] {"D1}{Ñ}
В моем .tex файле я использовал следующие параметры для списков:
\usepackage{listingsutf8}
\lstset{
inputencoding=utf8,
extendedchars=\true}
Надеюсь, что это может помочь кому угодно, и, возможно, мы сможем создать список .sty, содержащий почти все UTF8 char...:)
Ответ 12
Аналогично сообщениям до (yaxz и др.) я определил макросы для хорватского языка:
% on top
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[croatian]{babel}
% add listings package
\usepackage{listings}
% set font translations
\lstset{inputencoding=utf8}
\lstset{extendedchars=true}
\lstset{
literate=%
{ć}{{\'c}}1
{č}{{\v{c}}}1
{đ}{{\dj{}}}1
{š}{{\v{s}}}1
{ž}{{\v{z}}}1
{Ć}{{\'C}}1
{Č}{{\v{C}}}1
{Đ}{{\DJ{}}}1
{Š}{{\v{S}}}1
{Ž}{{\v{Z}}}1
}
У меня все еще есть "небольшая" проблема с добавлением ключевого слова "inače" . Следующее не будет работать для "inače" :
\lstset{morekeywords={ponavljaj, ako, inače, dok}}
Ключевое слово "inače" (которое отображается в коде) не распознается как ключевое слово. Любые идеи?
Надеюсь, это поможет кому-то (кроме меня:)).
Ответ 13
Мой вклад в литовский язык:
\lstset{%
literate=%
{ą}{{\k{a}}}1
{č}{{\v{c}}}1
{ę}{{\k{e}}}1
{ė}{{\.{e}}}1
{į}{{\k{i}}}1
{š}{{\v{s}}}1
{ų}{{\k{u}}}1
{ū}{{\={u}}}1
{ž}{{\v{z}}}1
{Ą}{{\k{A}}}1
{Č}{{\v{C}}}1
{Ę}{{\k{E}}}1
{Ė}{{\.{E}}}1
{Į}{{\k{I}}}1
{Š}{{\v{S}}}1
{Ų}{{\k{U}}}1
{Ū}{{\={U}}}1
{Ž}{{\v{Z}}}1
}
Ответ 14
Для польского:
\lstset{%
literate=%
{ą}{{\k{a}}}1
{ę}{{\k{e}}}1
{Ą}{{\k{A}}}1
{Ę}{{\k{E}}}1
{ś}{{\'{s}}}1
{Ś}{{\'{S}}}1
{ź}{{\'{z}}}1
{Ź}{{\'{Z}}}1
{ń}{{\'{n}}}1
{Ń}{{\'{N}}}1
{ć}{{\'{c}}}1
{Ć}{{\'{C}}}1
{ó}{{\'{o}}}1
{Ó}{{\'{O}}}1
{ż}{{\.{z}}}1
{Ż}{{\.{Z}}}1
{ł}{{\l{}}}1
{Ł}{{\l{}}}1
}
А вот список символов, чтобы вы могли создать его для вашего языка: https://en.wikibooks.org/wiki/LaTeX/Special_Characters
Ответ 15
Автор пакета предлагает использование опции texcl. Иногда это помогает, иногда нет.
Ответ 16
Самое чистое решение для этого - использовать пакет listings2: http://www.atscire.de/index.php?nav=products/listings2
Просто используйте \usepackage{listings2}
вместо \usepackage{listings}
и это.
Ответ 17
Норвежские буквы для listings.sty в решении @Janosch:
\[email protected]{"C5}{\AA}
\[email protected]{"C6}{\AE}
\[email protected]{"D8}{\O}
\[email protected]{"E5}{\aa}
\[email protected]{"E6}{\ae}
\[email protected]{"F8}{\o}
Ответ 18
Для вьетнамцев:
\usepackage{vntex}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{tipa}
\lstset{columns=fullflexible,literate=
{đ}{{\dj}}1
{â}{{\^a}}1
{ă}{{\u{a}}}1
{ê}{{\^e}}1
{ô}{{\^o}}1
{ơ}{{\ohorn}}1
{ư}{{\uhorn}}1
{á}{{\'a}}1
{à}{{\`a}}1
{ả}{\h{a}}1
{ã}{{\~a}}1
{ạ}{\textsubdot{a}}1
{ấ}{\'{\^a}}1
{ầ}{\`{\^a}}1
{ẩ}{\h{\^a}}1
{ẫ}{\~{\^a}}1
{ậ}{\textsubdot{\^a}}1
{ắ}{\'{\u{a}}}1
{ằ}{\`{\u{a}}}1
{ẳ}{\h{\u{a}}}1
{ẵ}{\~{\u{a}}}1
{ặ}{\textsubdot{\u{a}}}1
{é}{{\'e}}1
{è}{{\`e}}1
{ẻ}{\h{e}}1
{ẽ}{{\~e}}1
{ẹ}{\textsubdot{e}}1
{ế}{\'{\^e}}1
{ề}{\`{\^e}}1
{ể}{\h{\^e}}1
{ễ}{\~{\^e}}1
{ệ}{\textsubdot{\^{e}}}1
{í}{{\'i}}1
{ì}{{\`i}}1
{ỉ}{\h{i}}1
{ĩ}{{\~i}}1
{ị}{\textsubdot{i}}1
{ó}{{\'o}}1
{ò}{{\`o}}1
{ỏ}{\h{o}}1
{õ}{{\~o}}1
{ọ}{\textsubdot{o}}1
{ố}{\'{\^o}}1
{ồ}{\`{\^o}}1
{ổ}{\h{\^o}}1
{ỗ}{\~{\^o}}1
{ộ}{\textsubdot{\^o}}1
{ớ}{\'{\ohorn}}1
{ờ}{\`{\ohorn}}1
{ở}{\h{\ohorn}}1
{ỡ}{\~{\ohorn}}1
{ợ}{\textsubdot{\ohorn}}1
{ú}{{\'u}}1
{ù}{{\`u}}1
{ủ}{\h{u}}1
{ũ}{{\~u}}1
{ụ}{\textsubdot{u}}1
{ứ}{\'{\uhorn}}1
{ừ}{\`{\uhorn}}1
{ử}{\h{\uhorn}}1
{ữ}{\~{\uhorn}}1
{ự}{\textsubdot{\uhorn}}1
{ý}{{\'y}}1
{ỳ}{{\`y}}1
{ỷ}{\h{y}}1
{ỹ}{{\~y}}1
{ỵ}{\textsubdot{y}}1
{Đ}{{\DJ}}1
{Â}{{\^A}}1
{Ă}{{\u{A}}}1
{Ê}{{\^E}}1
{Ô}{{\^O}}1
{Ơ}{{\OHORN}}1
{Ư}{{\UHORN}}1
{Á}{{\'A}}1
{À}{{\`A}}1
{Ả}{\h{A}}1
{Ã}{{\~A}}1
{Ạ}{\textsubdot{A}}1
{Ấ}{\'{\^A}}1
{Ầ}{\`{\^A}}1
{Ẩ}{\h{\^A}}1
{Ẫ}{\~{\^A}}1
{Ậ}{\textsubdot{\^A}}1
{Ắ}{\'{\u{A}}}1
{Ằ}{\`{\u{A}}}1
{Ẳ}{\h{\u{A}}}1
{Ẵ}{\~{\u{A}}}1
{Ặ}{\textsubdot{\u{A}}}1
{É}{{\'E}}1
{È}{{\`E}}1
{Ẻ}{\h{E}}1
{Ẽ}{{\~E}}1
{Ẹ}{\textsubdot{E}}1
{Ế}{\'{\^E}}1
{Ề}{\`{\^E}}1
{Ể}{\h{\^E}}1
{Ễ}{\~{\^E}}1
{Ệ}{\textsubdot{\^{E}}}1
{Í}{{\'I}}1
{Ì}{{\`I}}1
{Ỉ}{\h{I}}1
{Ĩ}{{\~I}}1
{Ị}{\textsubdot{I}}1
{Ó}{{\'O}}1
{Ò}{{\`O}}1
{Ỏ}{\h{O}}1
{Õ}{{\~O}}1
{Ọ}{\textsubdot{O}}1
{Ố}{\'{\^O}}1
{Ồ}{\`{\^O}}1
{Ổ}{\h{\^O}}1
{Ỗ}{\~{\^O}}1
{Ộ}{\textsubdot{\^O}}1
{Ớ}{\'{\OHORN}}1
{Ờ}{\`{\OHORN}}1
{Ở}{\h{\OHORN}}1
{Ỡ}{\~{\OHORN}}1
{Ợ}{\textsubdot{\OHORN}}1
{Ú}{{\'U}}1
{Ù}{{\`U}}1
{Ủ}{\h{U}}1
{Ũ}{{\~U}}1
{Ụ}{\textsubdot{U}}1
{Ứ}{\'{\UHORN}}1
{Ừ}{\`{\UHORN}}1
{Ử}{\h{\UHORN}}1
{Ữ}{\~{\UHORN}}1
{Ự}{\textsubdot{\UHORN}}1
{Ý}{{\'Y}}1
{Ỳ}{{\`Y}}1
{Ỷ}{\h{Y}}1
{Ỹ}{{\~Y}}1
{Ỵ}{\textsubdot{Y}}1
}
Ответ 19
Мы все знаем, как LaTeX не играет хорошо с греческим. Тем не менее, это мой вклад, который требует нескольких обходных решений и не включает диакритические знаки (но работает!):
\usepackage[greek]{babel}
\usepackage{textgreek}
\usepackage{listings}
% Notice that here it is spelled ‘omikron’, not ‘omicron’,
% and that I use ‘\textmugreek’ instead of ‘\textmu’,
% which are both part of the textgreek package, but the
% ‘normal’ \textmu conflicts with the textcomp package as
% that uses another font for \textmu.
\DeclareUnicodeCharacter{03BF}{\textomikron}
\DeclareUnicodeCharacter{039F}{\textOmikron}
\DeclareUnicodeCharacter{03BC}{\textmugreek}
\lstset{
inputencoding=utf8,
extendedchars=true,
literate=
{α}{{\textalpha}}1 {Α}{{\textAlpha}}1
{β}{{\textbeta}}1 {Β}{{\textBeta}}1
{γ}{{\textgamma}}1 {Γ}{{\textGamma}}1
{δ}{{\textdelta}}1 {Δ}{{\textDelta}}1
{ε}{{\textepsilon}}1 {Ε}{{\textEpsilon}}1
{ζ}{{\textzeta}}1 {Ζ}{{\textZeta}}1
{η}{{\texteta}}1 {Η}{{\textEta}}1
{θ}{{\texttheta}}1 {Θ}{{\textTheta}}1
{ι}{{\textiota}}1 {Ι}{{\textIota}}1
{κ}{{\textkappa}}1 {Κ}{{\textKappa}}1
{λ}{{\textlambda}}1 {Λ}{{\textLambda}}1
{μ}{{\textmugreek}}1 {Μ}{{\textMu}}1
{ν}{{\textnu}}1 {Ν}{{\textNu}}1
{ξ}{{\textxi}}1 {Ξ}{{\textXi}}1
{ο}{{\textomikron}}1 {Ο}{{\textOmikron}}1
{π}{{\textpi}}1 {Π}{{\textPi}}1
{ρ}{{\textrho}}1 {Ρ}{{\textRho}}1
{σ}{{\textsigma}}1 {Σ}{{\textSigma}}1 {ς}{{\textvarsigma}}1
{τ}{{\texttau}}1 {Τ}{{\textTau}}1
{υ}{{\textupsilon}}1 {Υ}{{\textUpsilon}}1
{φ}{{\textphi}}1 {Φ}{{\textPhi}}1
{χ}{{\textchi}}1 {Χ}{{\textChi}}1
{ψ}{{\textpsi}}1 {Ψ}{{\textPsi}}1
{ω}{{\textomega}}1 {Ω}{{\textOmega}}1
}
Ответ 20
Для исландского:
\lstset{
literate=%
{Á}{{\'A}}1
{á}{{\'a}}1
{Ð}{{\dh}}1
{ð}{{\dh}}1
{É}{{\'E}}1
{é}{{\'e}}1
{í}{{\'i}}1
{Í}{{\'I}}1
{Ó}{{\'O}}1
{ó}{{\'o}}1
{Ú}{{\'U}}1
{ú}{{\'u}}1
{Ý}{{\'Y}}1
{ý}{{\'y}}1
{Þ}{{\TH}}1
{þ}{{\th}}1
{Æ}{{\AE}}1
{æ}{{\ae}}1
{Ö}{{\"O}}1
{ö}{{\"o}}1
}
Ответ 21
Просто не используйте UTF-8 в LaTex, если вы хотите использовать пакеты списков. Использование latin1 в ваших документах будет очень хорошо отображать немецкие Umlauts.
Я пишу диссертацию на немецком языке, используя эту настройку:
% Your language, here German
\usepackage[ngerman]{babel}
% Will work with Umlauts
\usepackage[latin1]{inputenc}
% Euro characters etc.
\usepackage{textcomp}
% Works perfectly with latin1
\usepackage{listings}
Ответ 22
Возможно, вам потребуется установить кодировку ввода документа, также быть UTF-8. Там поток comp.text.tex обсуждает, как это сделать. Следующее выполняет это в TeXLive на GNU/Linux:
\usepackage[utf8]{inputenc}