梅威瑟:
\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
模仿我们使用的编辑器行为的选项。此外,键prebreak
和postbreak
用于插入连字符。
顺便说一句,考虑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}