列表中的问题,连字符不正确

列表中的问题,连字符不正确

梅威瑟:

\documentclass[a4paper,11pt,twocolumn,openany]{book}
\usepackage[left=1.5cm,right=1.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{color}
\usepackage{listings}

\lstdefinelanguage{mytex}[LaTeX]{TeX}{
alsoletter={\\},
morekeywords=[3]{\\mbox,\mbox,},
literate={\{}{{\textcolor{blue}{\{}}}{1} {\}}{{\textcolor{blue}{\}}}}{1}
{ı}{\i}1 {ş}{\c{s}}1 {ğ}{\u{g}}1,
}

\lstset{language=mytex}

\lstdefinestyle{mystyle1}{
basicstyle=\normalsize\ttfamily, 
keywordstyle=[3]{\color{green}},
identifierstyle=\ttfamily,
breaklines=true,
columns=fullflexible,
}

\lstset{style=mystyle1}

\begin{document}

\begin{lstlisting}
\chapter[Fillerin Anatomisi]{Fillerin değişik kıtalardaki anatomilerinin karşılaştırılması}
\end{lstlisting}

\end{document}

并显示

在此处输入图片描述

正确的连字符,de-ği-şik 和 kar-şı-laş-tı-rıl-ma-sı。就像下面这张图片一样。

在此处输入图片描述

我能怎么做?

答案1

listings不连接单词。

您有这些换行符仅仅是因为您已经定义ış要打印“文学”。

您可以做的一件事是使用escapeinside={\%}{\%}作为选项手动插入换行符,然后%\linebreak%在想要换行的位置插入。

梅威瑟:

\documentclass[a4paper,11pt,twocolumn,openany]{book}
\usepackage[left=1.5cm,right=1.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{color}
\usepackage{listings}

\lstdefinelanguage{mytex}[LaTeX]{TeX}{
alsoletter={\\},
morekeywords=[3]{\\mbox,\mbox,},
literate={\{}{{\textcolor{blue}{\{}}}{1} {\}}{{\textcolor{blue}{\}}}}{1}
{ı}{\i}1 {ş}{\c{s}}1 {ğ}{\u{g}}1,
}

\lstset{language=mytex}

\lstdefinestyle{mystyle1}{
basicstyle=\normalsize\ttfamily,
keywordstyle=[3]{\color{green}},
identifierstyle=\ttfamily,
breaklines=true,
columns=fullflexible,
escapeinside={\%}{\%}
}

\lstset{style=mystyle1}

\begin{document}

\begin{lstlisting}
\chapter[Fillerin Anatomisi]{Fillerin deği%\linebreak%şik kıtalardaki anatomilerinin karşılaş%\linebreak%tırılması}
\end{lstlisting}

\end{document} 

输出:

在此处输入图片描述

希望您真的不想在列表中插入连字符,但如果您需要,请%\linebreak%用替换%- \linebreak%

答案2

除 karlkoeller 的回答外,还有一些评论:

lstmisc.sty那里

\lst@AddToHook{Init}
    {\lst@ifbreaklines
         \hbadness\@M \pretolerance\@M
         \@rightskip\@flushglue \rightskip\@rightskip % \raggedright
         \leftskip\z@skip \parindent\z@
         \def\lst@parshape{\parshape\tw@ \@totalleftmargin\linewidth
                           \lst@breakshape}%
     \else
         \let\lst@discretionary\@empty
     \fi}

您可以看到将listings(pre)tolerance 设置为最大值。一般来说,这意味着 TeX 永远不会寻找更好的断点 ---它只是坏了紧接着某个字符填充当前行。

listings提供了breakatwhitespace模仿我们使用的编辑器行为的选项。此外,键prebreakpostbreak用于插入连字符。

顺便说一句,考虑moretexcs而不是morekeywords

\documentclass[a4paper,11pt,twocolumn,openany]{book}
\usepackage[left=1.5cm,right=1.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{color,keystroke,listings}


\def\blue#1{\textcolor{blue}{\tt#1}}

\lstdefinelanguage{mytex}[LaTeX]{TeX}{
    moretexcs=[3]{mbox,chapter},
    literate={\{}{\blue\{}1 {\}}{\blue{\}}}1 {ı}{\i}1 {ş}{\c s}1 {ğ}{\u g}1
}

\lstset{language=mytex}

\lstdefinestyle{mystyle1}{
    basicstyle=\normalsize\ttfamily, 
    texcsstyle=*[3]{\color{green}},
    identifierstyle=\ttfamily,
    breaklines,
    prebreak=-,%\mbox{$\Enter$},
    columns=fullflexible,
}

\lstset{style=mystyle1}

\begin{document}

\begin{lstlisting}
\chapter[Fillerin Anatomisi]{Fillerin değişik kıtalardaki anatomilerinin karşılaştırılması}
\end{lstlisting}

\begin{lstlisting}[prebreak=\mbox{$\Enter$}]
\chapter[Fillerin Anatomisi]{Fillerin değişik kıtalardaki anatomilerinin karşılaştırılması}
\end{lstlisting}

\end{document}

相关内容