Списки в латексе с UTF-8 (или хотя бы немецкими умлаутами) - PullRequest
63 голосов
/ 12 июля 2009

Пытаясь включить исходный файл в свой латексный документ с помощью пакета листингов, у меня возникли проблемы с умлаутами на немецком языке внутри комментариев в коде. Использование

\lstset{
extendedchars=\true,
inputencoding=utf8x
}

Умлауты в исходных файлах (закодированные в UTF-8 без спецификации) обрабатываются, но они каким-то образом перемещаются в начало слова, в котором они содержатся. Так

// die Größe muss berücksichtigt werden

во входном исходном файле становится

// die ößGre muss übercksichtigt werden

в выходном файле.

ПРИМЕЧАНИЕ: так как я обнаружил ошибки в моей первоначальной настройке, я сильно отредактировал этот вопрос

Ответы [ 22 ]

1 голос
/ 10 февраля 2010

Я могу подтвердить, что решение, предоставленное Janosch, работает почти правильно.

В моем случае мне нужно было использовать испанские символы: á, é, í, ó, ú, ñ, Á, É, Í, Ó, Ú и пробовать его решение без результатов, пока я не скомпилировал свой файл с xelatex вместо pdflatex .

В любом случае вам следует изменить lists.sty либо в локальной копии, либо непосредственно в общем файле и добавить следующее:

\lst@CCPutMacro
    \lst@ProcessOther {"23}\#
    \lst@ProcessLetter{"24}\textdollar
    \lst@ProcessOther {"25}\%
    \lst@ProcessOther {"26}\&
        %spanish letters coded in UTF
    \lst@ProcessOther {"E1}{\'a}
    \lst@ProcessOther {"C1}{\'A}
    \lst@ProcessOther {"E9}{\'e}
    \lst@ProcessOther {"C9}{\'E}
    \lst@ProcessOther {"ED}{\'i}
    \lst@ProcessOther {"CD}{\'I}
    \lst@ProcessOther {"F3}{\'o}
    \lst@ProcessOther {"D3}{\'O}
    \lst@ProcessOther {"FA}{\'u}
    \lst@ProcessOther {"DA}{\'U}
    \lst@ProcessOther {"F1}{ñ}
    \lst@ProcessOther {"D1}{Ñ}

В моем файле .tex я использовал следующие параметры для списков:

\usepackage{listingsutf8}
\lstset{
        inputencoding=utf8,
        extendedchars=\true}

Надеюсь, что это может кому-нибудь помочь, и, возможно, мы сможем создать list.sty, содержащий почти каждый символ UTF8 ...:)

1 голос
/ 08 августа 2012

Как и в предыдущих сообщениях (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" (которое появляется в коде) не распознается как ключевое слово. Есть идеи?

Надеюсь, это кому-нибудь поможет (кроме меня :)).

1 голос
/ 09 марта 2014

Мой вклад для литовского языка:

\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
}
0 голосов
/ 22 марта 2015

Для вьетнамцев:

\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
  }
0 голосов
/ 30 сентября 2009

Автор пакета предлагает , используя опцию texcl. Иногда это помогает, иногда нет.

0 голосов
/ 17 января 2010

Просто не используйте UTF-8 в LaTex, если вы хотите использовать любые листинги пакетов. Использование latin1 в ваших документах покажет немецкие умлауты просто отлично.

Я пишу свою диссертацию на немецком языке, используя эту настройку:

% 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}
0 голосов
/ 16 июня 2011

Самое чистое решение для этого - использовать пакет lists2: http://www.atscire.de/index.php?nav=products/listings2

Просто используйте \usepackage{listings2} вместо \usepackage{listings} и все.

0 голосов
/ 31 августа 2016

для исландских:

\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
}
0 голосов
/ 15 октября 2015

Мы все знаем, как 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
}
0 голосов
/ 16 декабря 2012

Норвежские буквы для lists.sty в решении @ Janosch:

\lst@ProcessLetter{"C5}{\AA}
\lst@ProcessLetter{"C6}{\AE}
\lst@ProcessLetter{"D8}{\O}
\lst@ProcessLetter{"E5}{\aa}
\lst@ProcessLetter{"E6}{\ae}
\lst@ProcessLetter{"F8}{\o}
...