![파일 잘못된 문자 배치의 코드 목록 내부](https://rvso.com/image/391718/%ED%8C%8C%EC%9D%BC%20%EC%9E%98%EB%AA%BB%EB%90%9C%20%EB%AC%B8%EC%9E%90%20%EB%B0%B0%EC%B9%98%EC%9D%98%20%EC%BD%94%EB%93%9C%20%EB%AA%A9%EB%A1%9D%20%EB%82%B4%EB%B6%80.png)
코드 목록에 사용될 때 모국어(리투아니아어) 문자가 올바른 위치에 표시되지 않는 문제가 있습니다. 이 문제는 파일에서 나열하는 경우에도 발생합니다. 일반적으로 사용되는 특수 문자는 잘 표시됩니다. 어떤 이유에서인지 해당 문자는 계속해서 단어 시작 부분으로 돌아갑니다.
\documentclass[12pt]{article}
\usepackage{listings}
\usepackage[utf8x]{inputenc}
\usepackage[L7x]{fontenc}
\lstset{
extendedchars=false
}
\begin{document}
public KainųMatrica kainųMatrica \{ get; set; \}
\begin{lstlisting}
using System;
namespace L1
{
public class Kelias
{
public KainųMatrica kainųMatrica { get; set; }
public int Apsilankymai { get; protected set; }
private int dydis;
private int[] taškai;
public Kelias(int dydis = 1)
{
taškai = new int[dydis];
Apsilankymai = 0;
this.dydis = dydis;
}
\end{lstlisting}
\end{document}
답변1
섹션 2.5에서 인용목록 패키지 매뉴얼:
국민 캐릭터코드 128-255의 문자와 같은 문자를 직접 입력하고 목록에도 사용하는 경우 패키지에 알리십시오. 그렇지 않으면 정말 재미있는 결과를 얻게 될 것입니다.
extendedchars=true
허용한다그리고extendedchars=false
금지하다목록의 확장 문자 처리에서 목록. 이를 사용하는 경우, 글꼴, 입력 및/또는 문자를 정의하는 기타 패키지를 로드해야 합니다.→목록과 함께 inputenc를 사용하는 데 문제가 있습니다. 이는 호환성 문제일 수 있습니다. 섹션 7 문제 해결에 설명된 대로 버그 보고서를 작성합니다.
확장 문자는 아랍어, 중국어, 히브리어, 일본어 등, 특히 문자당 여러 바이트를 사용하는 모든 인코딩을 포함하지 않습니다.
따라서 CJK 또는 중국어 및 UTF-8 문자용 ucs 패키지와 같이 멀티바이트 문자를 지원하는 패키지를 사용하는 경우 목록에서 확장 문자를 처리하도록 허용하지 않아야 합니다.목록이 다른 패키지의 확장 문자 처리에 얽히는 것을 방지하려면 일반적으로 Extendedchars=false를 지정하는 것이 가장 좋습니다. CJK 환경에 포함된 목록이 있고 목록 안에 CJK 문자를 포함하고 싶다면 LATEX으로 이스케이프되는 주석 안에 해당 문자를 넣을 수 있습니다. 방법은 5.12절을 참조하세요. (목록이 CJK 환경 내에 있지 않은 경우 주석의 Escape-to-LATEX 부분 내에 작은 CJK 환경을 넣기만 하면 됩니다.) 마찬가지로 목록에서 UTF-8 확장 문자를 사용하는 경우 해당 문자를 배치해야 합니다. LaTeX로의 탈출 내에서. 또한 섹션 9에는 Λ의 맥락에서 확장 문자를 사용하는 방법에 대한 몇 가지 세부 정보가 있습니다.
멀티바이트 인코딩인 utf8x/utf8을 사용하고 "ų"와 같은 국가 문자를 직접 입력하려는 것 같습니다.
extendedchars=false
설명서에는 extendedchars=true
목록 패키지가 이러한 확장/국가별 문자를 처리하도록 허용 해야 한다고 나와 있습니다 .
멀티바이트 인코딩인 utf8x/utf8을 사용합니다. 그러나 매뉴얼에서는 멀티바이트 인코딩에서 나온 문자를 목록에서 처리하고 1바이트 이상으로 인코딩되는 것을 피해야 한다고 명시되어 있지만, 멀티바이트 인코딩인 utf8x/utf8을 사용합니다.
다음을 수행할 수 있습니다.
- 설정하지 말고
extendedchars=false
설정extendedchars=true
하고 - Heiko Oberdiek의 항목을 로드하여 목록 패키지가 멀티바이트 문자를 처리할 필요가 없는지 확인하세요.목록sutf8-패키지는
\lstinputlisting
-명령에 대해 실제로 목록에 항목을 공급하기 전에 멀티바이트 인코딩에서 적합한 단일 바이트 인코딩으로 변환하는 루틴을 제공합니다. - 예를 들어,
filecontents*
-environment를 통해파일 내용-package 목록을 임시 파일에 넣고\lstinputlisting
-command를 통해 삽입합니다.
내 시스템에는 L7x 인코딩이 없으며 utf8x보다 utf8이 더 낫다고 생각합니다.
따라서 아래 예에서는 T1을 글꼴 인코딩으로 사용하고 utf8을 입력 인코딩으로 사용했습니다.
시스템에서 L7x 및 utf8x에서도 문제가 없는지 테스트할 수 있습니다.
\documentclass[12pt]{article}
\usepackage{listings}
\usepackage{listingsutf8}
\usepackage{filecontents}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage[utf8x]{inputenc}
%\usepackage{L7x]{fontenc}
\lstset{extendedchars=true}
% Don't do this as then you cannot type national characters
% in single-byte-encodings (characters 128-255) directly
% any more:
%\lstset{
%extendedchars=false
%}
\begin{document}
public KainųMatrica kainųMatrica \{ get; set; \}
\begin{filecontents*}{temp.tex}
using System;
namespace L1
{
public class Kelias
{
public KainųMatrica kainųMatrica { get; set; }
public int Apsilankymai { get; protected set; }
private int dydis;
private int[] taškai;
public Kelias(int dydis = 1)
{
taškai = new int[dydis];
Apsilankymai = 0;
this.dydis = dydis;
}
\end{filecontents*}
% ISO/IEC 8859-4 = Latin-4 is designed to cover
% Estonian, Latvian, Lithuanian, Greenlandic, and Sami.
% See: https://en.wikipedia.org/wiki/ISO/IEC_8859-4
\lstinputlisting[inputencoding=utf8/latin4]{temp.tex}%
\end{document}
답변2
더 간단합니다(완료하는 것이 조금 더 지루하지만 한 번에 모든 작업을 수행할 수 있음): literate
.
\documentclass[12pt]{article}
\usepackage{listings}
\usepackage[utf8]{inputenc} % utf8x is outdated and unmaintained
\usepackage[L7x]{fontenc}
\usepackage{lmodern} % cmr doesn't support L7x
\lstset{
literate=%
{ų}{{\k{u}}}1%
{š}{{\v{s}}}1%
% add more as needed
}
\begin{document}
public KainųMatrica kainųMatrica \{ get; set; \}
\begin{lstlisting}
using System;
namespace L1
{
public class Kelias
{
public KainųMatrica kainųMatrica { get; set; }
public int Apsilankymai { get; protected set; }
private int dydis;
private int[] taškai;
public Kelias(int dydis = 1)
{
taškai = new int[dydis];
Apsilankymai = 0;
this.dydis = dydis;
}
\end{lstlisting}
\end{document}