使用UTF-8(或至少德语变音符号)在Latex中列出

Jan*_*sch 65 encoding latex utf-8 diacritics listings

尝试使用列表包将源文件包含到我的乳胶文档中,我在代码中的注释中遇到了德语变音符号的问题.运用

\lstset{
extendedchars=\true,
inputencoding=utf8x
}
Run Code Online (Sandbox Code Playgroud)

处理源文件中的变音符号(以无BOM的UTF-8编码),但它们以某种方式移动到它们所包含的单词的开头.所以

// die Größe muss berücksichtigt werden
Run Code Online (Sandbox Code Playgroud)

在输入源文件中,变为

// die ößGre muss übercksichtigt werden
Run Code Online (Sandbox Code Playgroud)

在输出文件中.

注意:因为我在初始设置中发现错误,所以我大量编辑了这个问题

小智 57

我发现了一种更简单的方法,对我有用:

\usepackage{listings}

\lstset{
  literate={ö}{{\"o}}1
           {ä}{{\"a}}1
           {ü}{{\"u}}1
}
Run Code Online (Sandbox Code Playgroud)

  • 它也适用于土耳其语。这是相关的代码片段: `\lstset{ literate={â}{{\^{a}}}1 {Â}{{\^{A}}}1 {ç}{{\c{c}} }1 {Ç}{{\c{C}}}1 {ğ}{{\u{g}}}1 {Ğ}{{\u{G}}}1 {ı}{{\i}} 1 {İ}{{\.{I}}}1 {ö}{{\"o}}1 {Ö}{{\"O}}1 {ş}{{\c{s}}}1 { Ş}{{\c{S}}}1 {ü}{{\"u}}1 {Ü}{{\"U}}1 }` (3认同)
  • 另一个答案中描述的使用 `texcl=true` 的解决方案似乎更优雅。 (2认同)
  • 要编码s sharp("scharfes s"),请使用`literate = {ß} {{\ ss}} 1 (2认同)

Seb*_*CHA 32

仅供评论,您可以使用以下texcl选项:

\lstset{language=C++,texcl=true}
Run Code Online (Sandbox Code Playgroud)

比你的评论成为Latex,你可以使用"特殊"字符

\begin{lstlisting}
int iLink = 0x01; // Paramètre entrée
\end{lstlisting}
Run Code Online (Sandbox Code Playgroud)

  • 这是这里最优雅的解决方案之一,需要更多的支持!:) (5认同)

小智 21

所以geht es(应该适用于其他语言 - 西班牙语,丹麦语)

--- SNIP ---

\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} 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 - 它有效!波兰语也是如此:\ lstset {literate = {ą} {{\ k {a}}} 1 {ł} {{\ l {}}} 1 {æ} {{\'n}} 1 {}} {{\ k {e}}} 1 {}} {{\'s}} 1 {д} {{\.z}} 1 {ó} {{\'o}} 1 {ź} {{\'' z}} 1 {Ą} {{\ k {A}}} 1 {Ł} {{\ L {}}} 1 {Ń} {{\'N}} 1 {Ę} {{\ k {E} 1 {Ś} {{\'S}} 1 {Ż} {{\.Z}} 1 {Ó} {{\'O}} 1 {Ź} {{\'Z}} 1} (4认同)
  • 感谢GDR!这是一个节省时间.你只忘了ć和Ć.以下为快速Ctrl + C + Ctrl + V的完整列表(奖金:已排序):\ lstset {literate =%{±} {{\ k {a}}} 1 {ć} {{\'c} } {1} {{\ k {e}}} 1 {ł} {{\ l {}}} 1 {æ} {{\'n}} 1 {ó} {{\'o}} 1 { ś} {{\'s}} 1 {д} {{\.z}} 1 {ź} {{\'z}} 1 {Ą} {{\ k {A}}} 1 {Ć} {{ \'C}} 1 {Ę} {{\ k {E}}} 1 {Ł} {{\ L {}}} 1 {Ń} {{\'N}} 1 {Ó} {{\'O 1 {}} {{\'S}} 1 {Ż} {{\.Z}} 1 {Ź} {{\'Z}} 1}(显然评论没有换行符,所以粘贴之后必须解决它(例如在vim中:`:.s//\r/g`) (3认同)
  • 谢谢 - 好的解决方案!无论如何,它应该是`{ß} {{\ ss}} 1`,因为"ß"在输出中只占用1个字符;) (3认同)

Tom*_*art 14

我对捷克语的贡献.

\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
}
Run Code Online (Sandbox Code Playgroud)


Jan*_*sch 11

好的,现在发现有点解决方法:

  1. 而不是列表包,使用listingsutf8

    \ usepackage {listingsutf8}

  2. 将listing.sty复制到文档所在的文件夹中

  3. 找到以下几行

    \lst@CCPutMacro
        \lst@ProcessOther {"23}\#
        \lst@ProcessLetter{"24}\textdollar
        \lst@ProcessOther {"25}\%
        \lst@ProcessOther {"26}\&
  4. 在那里输入以下行(每个"寄存器"一个变音符号)

    \lst@ProcessLetter{"E4}{\"a}
    \lst@ProcessLetter{"F6}{\"o}
    \lst@ProcessLetter{"FC}{\"u}
    \lst@ProcessLetter{"C4}{\"A}
    \lst@ProcessLetter{"D6}{\"O}
    \lst@ProcessLetter{"DC}{\"U}
    \lst@ProcessLetter{"DF}{\ss{}}
  5. 保存文件

  6. 使用

    \lstset{
        extendedchars=\true,
        inputencoding=utf8/latin1
    }

启用utf8字符到latin1字符映射

  1. 将源文件的行结尾从windows(\ r \n)转换为unix(\n)
  2. 请享用

我知道这在很多方面都是丑陋的,但它是迄今为止对我有用的唯一解决方案.


Mar*_*rda 10

我对巴西葡萄牙语的贡献.

\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
}
Run Code Online (Sandbox Code Playgroud)