![Listagem de código interno do posicionamento de caracteres incorretos do arquivo](https://rvso.com/image/391718/Listagem%20de%20c%C3%B3digo%20interno%20do%20posicionamento%20de%20caracteres%20incorretos%20do%20arquivo.png)
Existe um problema em que os caracteres do meu idioma nativo (lituano) não aparecem nas posições adequadas quando usados na listagem de código. Esse problema ocorre mesmo ao listar do arquivo. Normalmente usados, esses caracteres especiais aparecem bem. Por alguma razão, esses personagens continuam voltando ao início da palavra.
\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}
Responder1
Citação da seção 2.5 Caracteres especiais domanual do pacote de listagens:
Personagens nacionaisSe você digitar esses caracteres diretamente como caracteres dos códigos 128 a 255 e usá-los também em listagens, informe o pacote - ou você obterá resultados realmente engraçados.
extendedchars=true
permiteeextendedchars=false
proíbelistagens de lidar com caracteres estendidos em listagens. Se você usá-los, você deve carregar fontenc, inputenc e/ou qualquer outro pacote que defina os caracteres.→Tenho problemas ao usar o inputenc junto com listagens. Isso pode ser um problema de compatibilidade. Faça um relatório de bug conforme descrito na seção 7 Solução de problemas.
Os caracteres estendidos não abrangem árabe, chinês, hebraico, japonês e assim por diante — especificamente, qualquer codificação que utilize vários bytes por caractere.
Portanto, se você usar um pacote que suporte caracteres multibyte, como os pacotes CJK ou ucs para caracteres chineses e UTF-8, deverá evitar permitir que as listagens processem os caracteres estendidos.Geralmente é melhor especificar também extendedchars=false para evitar que as listagens fiquem emaranhadas no tratamento de caracteres estendidos do outro pacote. Se você tiver uma listagem contida em um ambiente CJK, e quiser ter caracteres CJK dentro da listagem, você pode colocá-los dentro de um comentário que escape para o LATEX – veja a seção 5.12 para saber como fazer isso. (Se a listagem não estiver dentro de um ambiente CJK, você pode simplesmente colocar um pequeno ambiente CJK dentro da parte de escape para LATEX do comentário.) Da mesma forma, se você estiver usando caracteres estendidos UTF-8 em uma listagem, eles deverão ser colocados dentro de uma fuga para o LaTeX. Além disso, a seção 9 traz alguns detalhes sobre como trabalhar com caracteres estendidos no contexto de Λ.
Parece que você deseja usar utf8x/utf8, que é uma codificação multibyte, e deseja digitar caracteres nacionais como "ų" diretamente.
Você tem, extendedchars=false
embora o manual diga que você precisa extendedchars=true
permitir que o pacote de listagens lide com esses caracteres estendidos/nacionais.
Você usa utf8x/utf8, que é uma codificação multibyte, embora o manual diga que você deve evitar permitir que as listagens processem caracteres provenientes de codificações multibyte e sejam codificados por mais de um byte.
Você pode fazer o seguinte:
- Não defina
extendedchars=false
, mas definaextendedchars=true
e - Certifique-se de que o pacote de listagens não precise lidar com caracteres multibyte carregando o arquivo de Heiko Oberdieklistagemsutf8-package que para o
\lstinputlisting
-command fornece rotinas para conversão de codificação multibyte para uma codificação de byte único adequada antes de realmente alimentar as listagens e - Por exemplo, através do
filecontents*
ambiente doconteúdo do arquivo-package coloca a listagem em um arquivo temporário e insere-o por meio do\lstinputlisting
comando -.
Não tenho codificação L7x em meu sistema e acho que utf8 é preferível a utf8x.
Portanto, com o exemplo abaixo usei T1 como codificação de fonte e utf8 como codificação de entrada.
No seu sistema você também pode testar se as coisas funcionam com L7x e 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}
Responder2
Mais simples (embora um pouco mais tedioso de concluir, mas é um trabalho definitivo): use 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}