Python - Latex: リストで特殊文字が正しく置換されない

okwaves2024-01-25  8

ドキュメントに Python スクリプトを含めたいのですが、それらのスクリプトでは á é í ó ú のような文字を使用しています。 \lstet の literate オプションを使用しています。コード例は次のとおりです。

\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[spanish,es-tabla]{babel}
\usepackage{listings, pythonhighlight}
\lstset{ 
    basicstyle=\ttfamily\small,
    breakatwhitespace=false,
    breaklines=true,        
    inputencoding=utf8,
    extendedchars=false, 
    literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
}

\begin{document}
    \lstinputlisting[language=Python]{example.py}
\end{document}

以下を含む Python スクリプト (example.py) を使用します。

# coding = utf-8
# á é í ó ú

次のような PDF が得られます。

すべての特殊文字は、リテラシー オプションの最後の特殊文字に置き換えられます。

なぜこのようなことが起こっているのでしょうか?

編集

パッケージのリストの代わりに listsutf8 を使用する

    basicstyle=\ttfamily\small,
    breakatwhitespace=false,
    breaklines=true,        
    inputencoding=utf8,
    extendedchars=false, 
    literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
}

は何も変わりません。 listsutf8 を次のように使用する:

\lstset{ ...
    inputencoding=utf8/latin1,
   ...
}

必要な特殊文字をすべて使用できますが、配置が間違っています (すべての特殊文字が Python コメントの先頭に表示され、文内の本来あるべき場所に表示されません)。

listingsutf8 を次のように使用します:

\lstset{ ...      
    inputencoding=latin1,
...
}

私のコードは utf8 なので、コンパイル時にエラーが発生するため、機能しません。

これは役に立ちます: リストにアクセントのあるコードを挿入するにはどうすればよいですか?

– ライアン・ラッケマン

2020 年 9 月 4 日 18:35

2

そこにある解決策はどれも機能しないようです。 literate オプションを使用するものでも同じ問題が発生します。のinputencoding=utf8/latin1 オプションを指定してパッケージリスト sutf8 を使用するものは特殊文字の位置を間違えます。また、inputencoding=latin1 のみを使用するものはコードが utf-8 であるためコンパイルされません。言語ごとに異なるソリューションが機能するようですが、スペイン語で機能するとされるソリューションは私には機能しないようです。

– 生化学者のアイレン

2020 年 9 月 4 日 19:48



------------------------

さて、なんとか機能させることができました。なぜこれが起こったのかはまだわかりません。なぜなら、私にはうまくいかなかった方法でそれを解決できる同じ問題を抱えている他の人を見てきたからです。誰かが自分自身を見つけたら、私は同じ状況で、私にとってうまくいったのは次のとおりです。

\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{listingsutf8, pythonhighlight}
\lstset{ 
    basicstyle=\ttfamily\small,
    breakatwhitespace=false,        
    breaklines=true,        
    inputencoding=utf8/latin1,
    extendedchars=true, 
    literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
}

\begin{document}
    \lstinputlisting[language=Python]{Programas/data_bindings_RF.py}
\end{document}

他の組み合わせでは機能しなかったことに注意してください。 \usepackage{listingsutf8} パッケージと

を使用するだけでそれを機能させた人を見てきました。
\lstset{ 
literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
} 

オプションですが、私にとっては同じ結果が得られました。パッケージと設定の他の組み合わせにも同じことが当てはまりますが、理由はわかりません。頑張ってください!

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。