텍스트를 왼쪽에서 오른쪽으로 자릅니다.

텍스트를 왼쪽에서 오른쪽으로 자릅니다.

간단히공백이 없는 일련의 문자인 텍스트 문자열을 잘라야 하므로 줄 바꿈이 작동하지 않습니다. 끈의 길이를 센티미터 단위로 결정하면 되고 나머지는 잘라야 합니다.

패키지를 찾았어요트림클립그렇게 할 수 있지만 이 패키지를 사용하지 않고 이를 수행할 수 있는 방법이 필요합니다. (기존의 일반 패키지를 계속 사용할 수 있습니다.)

또 다른 가능성이 있기를 바랍니다. 나는 찾았다아주 좋은 방법오른쪽에서 끈을 자르고 싶다면 이렇게 하세요. 하지만 다른 쪽에서 필요합니다.

내 문서가 어떻게 보이는지 간단한 예를 들어 보겠습니다.

\documentclass{article}
\newcommand\magicCommand[1]{
      ...
}
\begin{document}

\begin{table}[htb]
\begin{center}
\begin{tabular}{l}

\begin{tabular}{|ll|}
\hline

\parbox{50mm}{ \magicCommand{3cm}{veryLongStringWhichIsGoingToLookUglyInMyDocument}} & \parbox{40mm}{ abc }\\

\hline
\end{tabular}

\end{tabular}
\end{center}
\end{table}

\end{document}

위 예의 텍스트는 문서에서 다음과 같아야 합니다.

veryLongStri

\편집하다

이렇게 길게 편집해서 죄송합니다. 하지만 꽤 혼란스럽습니다. 이 코드는 truncate어떻게든 버그가 있는 것 같습니다(문자열에 따라 다름). 보시다시피 다른 테스트도 수행했습니다. 제대로 작동하는 것처럼 보이는 몇 가지 솔루션이 있습니다. 일부 버전은 테이블 형식 환경 외부에서만 작동했기 때문에 이전에 어떤 문제가 발생했는지 모르겠습니다.

test.tex

\documentclass[10pt]{article}
\usepackage{a4,graphicx}
\usepackage[breakwords]{truncate}

\setlength{\oddsidemargin}{0cm}
\setlength{\evensidemargin}{0cm}
\setlength{\topmargin}{-2.0cm}
\setlength{\textwidth}{16cm}
\setlength{\textheight}{28.65cm}
\setlength{\headsep}{1.0cm}
\setlength{\parindent}{1.0cm}
\newcommand{\singlespace}{\renewcommand{\baselinestretch}{1.0}\small\normalsize}\newcommand{\doublespace}{\renewcommand{\baselinestretch}{1.5}\small\normalsize}
\renewcommand{\floatpagefraction}{0.95}
\renewcommand{\textfraction}{0.05}
\renewcommand{\topfraction}{0.95}
\renewcommand{\bottomfraction}{0.95}

%===new===

\newlength{\stringlen}
\newbox\stringbox
\newcommand{\clipstring}[2][6cm]{%
  \setlength\stringlen{#1}%
  \sbox\stringbox{}%
  \doclipstring#2\doclipstring
}

\makeatletter
\newcommand{\doclipstring}[1]{%
  \ifx#1\doclipstring
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\unhbox\stringbox}%
  {\check@cliplength{#1}}%
}
\def\check@cliplength#1{%
  \sbox\stringbox{\unhcopy\stringbox #1}
  \ifdim\wd\stringbox>\stringlen
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\unhbox\stringbox\removetrailing}%
  {\doclipstring}%
}
\def\removetrailing#1\doclipstring{}
\makeatother

%=========

\usepackage{xcolor}
\newcommand\tleft[3][white]{%
  \setbox0=\hbox{\x}%
  \makebox[#2][l]{%
    \ooalign{\mbox{#3}\cr\kern#2\textcolor{#1}{%
      \rule[-\dp0]{\wd0}{\dimexpr\dp0+\ht0}}}}%
}

%=========

\makeatletter
\newcommand\jw[2][2cm]{%
  \leavevmode
  \begingroup
    \setbox0=\hbox{#2}%
    \setbox0=\hbox{%
      \pdfsave
      \pdfliteral{%
        0 \dim@in@bp{-\dp0 } \dim@in@bp{#1} \dim@in@bp{\ht0 + \dp0 }
        re W n}%
        \rlap{\box0 }%
      \pdfrestore
      \hskip#1 %
    }%
    \box0 %
  \endgroup
}
\newcommand\dim@in@bp[1]{%
  \strip@pt\dimexpr(#1) * 800/803\relax
}
\makeatother

%=========


\begin{document}

\pagestyle{empty}
\begin{table}[htb]
\begin{center}
\begin{tabular}{l}
\begin{tabular}{|ll|}
\hline
 \parbox{60mm}{ thoseAreTheVeryLongStringsWeWantToCutOtherwiseTheTableLooksLikeCrap\_bad }& \parbox{80mm}{ 0.031 }\\

 \parbox{60mm}{ \truncate{6cm}{qwfioqoiwefjiuwgwejfmqefiuhSiqwdMwqkdwqmkMqdwmDWmdwklqwdmlDMlkqwlkdMDLWQd} }& \parbox{80mm}{ 2.047 }\\
 \parbox{60mm}{ \truncate{6cm}{qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\_qqqq} }& \parbox{80mm}{ 2.047 }\\
 \parbox{60mm}{ \truncate{6cm}{aaaaaaaa\_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\_qqqq} }& \parbox{80mm}{ 2.047 }\\
 \parbox{60mm}{ \truncate{6cm}{truncate\_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\_qqqq} }& \parbox{80mm}{ 2.047 }\\
 \parbox{60mm}{ \truncate{6cm}{thoseAreTheVeryLongStringsWeWantToCutOtherwiseTheTableLooksLikeCrap\_good} }& \parbox{80mm}{ 1.023 }\\

 \parbox{60mm}{ \clipstring{clipstring\_thoseAreTheVeryLongStringsWeWantToCutOtherwiseTheTableLooksLikeCrap} }& \parbox{80mm}{ 1.023 }\\

 \parbox{60mm}{ \tleft{6cm}{tleft\_thoseAreTheVeryLongStringsWeWantToCutOtherwiseTheTableLooksLikeCrap} }& \parbox{80mm}{ 1.023 }\\

 \parbox{60mm}{ \jw[6cm]{jw\_thoseAreTheVeryLongStringsWeWantToCutOtherwiseTheTableLooksLikeCrap} }& \parbox{80mm}{ 1.023 }\\
 \parbox{60mm}{ \jw[6cm]{jw\_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq\_qqqq} }& \parbox{80mm}{ 1.023 }\\

\hline
\end{tabular}
\end{tabular}
\end{center}
\end{table}

\end{document}

testoutput

여기에 이미지 설명을 입력하세요

pdflatex.log

This is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6)
 %&-line parsing enabled.
entering extended mode
(./test.tex
LaTeX2e <2005/12/01>
Babel <v3.8h> and hyphenation patterns for english, usenglishmax, dumylang, noh
yphenation, arabic, basque, bulgarian, coptic, welsh, czech, slovak, german, ng
erman, danish, esperanto, spanish, catalan, galician, estonian, farsi, finnish,
 french, greek, monogreek, ancientgreek, croatian, hungarian, interlingua, ibyc
us, indonesian, icelandic, italian, latin, mongolian, dutch, norsk, polish, por
tuguese, pinyin, romanian, russian, slovenian, uppersorbian, serbian, swedish, 
turkish, ukenglish, ukrainian, loaded.
(/usr/share/texmf/tex/latex/base/article.cls
Document Class: article 2005/09/16 v1.4f Standard LaTeX document class
(/usr/share/texmf/tex/latex/base/size10.clo))
(/usr/share/texmf/tex/latex/ntgclass/a4.sty)
(/usr/share/texmf/tex/latex/graphics/graphicx.sty
(/usr/share/texmf/tex/latex/graphics/keyval.sty)
(/usr/share/texmf/tex/latex/graphics/graphics.sty
(/usr/share/texmf/tex/latex/graphics/trig.sty)
(/usr/share/texmf/tex/latex/config/graphics.cfg)
(/usr/share/texmf/tex/latex/pdftex-def/pdftex.def)))
(/usr/share/texmf/tex/latex/ltxmisc/truncate.sty)
(/usr/share/texmf/tex/latex/xcolor/xcolor.sty
(/usr/share/texmf/tex/latex/config/color.cfg)) (./test.aux)
Overfull \hbox (194.49529pt too wide) in paragraph at lines 96--96
[]\OT1/cmr/m/n/10 thoseAreTheVeryLongStringsWeWantToCutOtherwiseTheTableLooksLi
keCrap[]bad 

Overfull \hbox (207.60631pt too wide) detected at line 99
\OT1/cmr/m/n/10 qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqq[]qqqq 

Overfull \hbox (251.20644pt too wide) detected at line 100
\OT1/cmr/m/n/10 aaaaaaaa[]qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qqqqqqqqqqqqqq[]qqqq 

Overfull \hbox (3.02272pt too wide) in paragraph at lines 104--104
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][
]\OT1/cmr/m/n/10 c[]l[]i[]p[]s[]t[]r[]i[]n[]g[][][]t[]h[]o[]s[]e[]A[]r[]e[]T[]h
[]e[]V[]e[]r[]y[]L[]o[]n[]g[]S[]t[]r[]i[]n[]g[]s[] 
! Undefined control sequence.
\\tleft [#1]#2#3->\setbox 0=\hbox {\x 
                                      }\makebox [#2][l]{\ooalign {\mbox {#3}...
l.106 ...antToCutOtherwiseTheTableLooksLikeCrap} }
                                                  & \parbox{80mm}{ 1.023 }\\
? [1{/usr/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./test.aux) )</usr/sh
are/texmf/fonts/type1/bluesky/cm/cmr10.pfb>
Output written on test.pdf (1 page, 12123 bytes).
Transcript written on test.log.

답변1

truncate패키지를 사용하세요

\documentclass{article}
\usepackage[breakwords]{truncate}
\begin{document}
\truncate{3cm}{This text has been~truncated}
\end{document}

패키지는 하이픈 연결을 기반으로 한 영리한 전략을 사용합니다. 그러나 주의할 점은 길고 무의미한 문자 시퀀스를 삽입하는 경우 중단점을 찾는 데 문제가 있을 수 있다는 것입니다. 합리적인 텍스트를 사용하면 매우 잘 작동합니다. 문서를 읽어보세요. texdoc truncate명령줄에서 사용하는 것이 가장 빠른 방법입니다.

답변2

\width대부분의 상자 조작을 수행할 때 상자의 자연스러운 너비가 포함되어 있음을 참조할 수 있습니다 .

\documentclass{article}
\usepackage{trimclip}

\newcommand\clipstring[2][3cm]{%
  \clipbox{0pt 0pt {\dimexpr\width-#1\relax} 0pt}{#2}%
}

\begin{document}

\clipstring{veryLongStringWhichIsGoingToLookUglyInMyDocument} is
not too long any more

\makebox[3cm]{\hrulefill} is not too long any more

\end{document}

에 선택적 인수를 추가했으므로 \clipstring런타임 시 를 사용하여 길이를 조정할 수 있습니다 \clipstring[2cm]{...}.

여기에 이미지 설명을 입력하세요

유지할 문자 수를 지정하여 타자기 유형으로 문자열을 자르는 매크로가 필요할 수 있습니다.

\documentclass{article}
\usepackage{trimclip}

\newcommand\clipstring[2][3cm]{%
  \clipbox{0pt 0pt {\dimexpr\width-#1\relax} 0pt}{#2}%
}
\newcommand\clipttstring[2][10]{%
  \texttt{\clipbox{0pt 0pt {\dimexpr\width-(#1em)/2\relax} 0pt}{#2}}%
}

\begin{document}

\clipstring{veryLongStringWhichIsGoingToLookUglyInMyDocument} is
not too long any more

\makebox[3cm]{\hrulefill} is not too long any more % check

\clipttstring{veryLongStringWhichIsGoingToLookUglyInMyDocument} is
not too long any more

\texttt{0123456789} is not too long any more % check

\end{document}

기본값은 10이며, \clipttstring[6]{...}6자만 유지하는 데 사용됩니다.

여기에 이미지 설명을 입력하세요


대신 고정 길이를 초과하면 문자 인쇄를 중지하는 매크로가 있습니다.

\documentclass{article}

\newlength{\stringlen}
\newbox\stringbox
\newcommand{\clipstring}[2][3cm]{%
  \setlength\stringlen{#1}%
  \sbox\stringbox{}%
  \doclipstring#2\doclipstring
}

\makeatletter
\newcommand{\doclipstring}[1]{%
  \ifx#1\doclipstring
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\unhbox\stringbox}%
  {\check@cliplength{#1}}%
}
\def\check@cliplength#1{%
  \sbox\stringbox{\unhcopy\stringbox #1}
  \ifdim\wd\stringbox>\stringlen
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\unhbox\stringbox\removetrailing}%
  {\doclipstring}%
}
\def\removetrailing#1\doclipstring{}
\makeatother

\begin{document}

\clipstring{veryLongStringWhichIsGoingToLookUglyInMyDocument} is
not too long any more

\makebox[3cm]{\hrulefill} is not too long any more % check

\clipstring{shrt} is short

\end{document}

여기에 이미지 설명을 입력하세요

제한사항: 인수는 단순 ASCII 문자의 문자열이어야 합니다. 하지만 공백도 없고 악센트 문자도 없습니다.


유사한 솔루션이지만 유지할 문자 수를 계산합니다(기본적으로 10개).

\documentclass{article}
\makeatletter
\newcommand\stringclip[2][10]{%
  \@tempcnta=#1\relax
  \@tempcntb=\z@
  \toks@={}%
  \do@stringclip#2\do@stringclip
}
\def\do@stringclip#1{%
  \ifx#1\do@stringclip
    \the\toks@\expandafter\@gobble
  \else
    \advance\@tempcntb\@ne
  \expandafter\@firstofone
  \fi
  {\check@one@more{#1}}%
}
\def\check@one@more#1{%
  \ifnum\@tempcntb=\@tempcnta
    \the\toks@ #1%
    \expandafter\@firstoftwo
  \else
    \toks@=\expandafter{\the\toks@ #1}%
    \expandafter\@secondoftwo
  \fi
  {\gobble@toend}%
  {\do@stringclip}%
}
\def\gobble@toend#1\do@stringclip{}
\makeatother

\begin{document}

\stringclip{01234567890123456789}

\stringclip[5]{01234567890123456789}

\stringclip{012345}

\end{document}

여기에 이미지 설명을 입력하세요

답변3

드라이버 수준의 박스 클리핑을 사용한 솔루션 액세스~을 통해 expl3(인터페이스egreg의 버전):

\documentclass{article}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\NewDocumentCommand \clipstring { O { 2cm } m }
  {
    \erp_clip:nn {#2} {#1}
  }
\box_new:N \l__erp_box
\cs_new_protected:Npn \erp_clip:nn #1#2
  {
    \leavevmode
    \hbox_set:Nn \l__erp_box {#1}
    \box_set_wd:Nn \l__erp_box {#2}
    \box_clip:N \l__erp_box
    \box_use:N \l__erp_box
  }
\ExplSyntaxOff

\begin{document}

\clipstring[3cm]{veryLongStringWhichIsGoingToLookUglyInMyDocument} is
not too long any more

\makebox[3cm]{\hrulefill} is not too long any more % check

\end{document}

패키지가 전혀 허용되지 않으면 '손으로' 낮은 수준의 클리핑을 기록하여 동일한 작업을 수행할 수 있습니다. 이는 한 명의 드라이버에 묶여 있지만 허용될 수 있습니다. 예를 들어 직접 PDF 제작을 위해 pdfTeX 또는 LuaTeX를 사용하면 위의 '작성된' 내용은 다음과 같습니다.

\documentclass{article}
\makeatletter
\newcommand\clipstring[2][2cm]{%
  \leavevmode
  \begingroup
    \setbox0=\hbox{#2}%
    \setbox0=\hbox{%
      \pdfsave
      \pdfliteral{%
        0 \dim@in@bp{-\dp0 } \dim@in@bp{#1} \dim@in@bp{\ht0 + \dp0 }
        re W n}%
        \rlap{\box0 }%
      \pdfrestore
      \hskip#1 %
    }%
    \box0 %
  \endgroup
}
\newcommand\dim@in@bp[1]{%
  \strip@pt\dimexpr(#1) * 800/803\relax
}
\makeatother

\begin{document}
\clipstring[2.95cm]{veryLongStringWhichIsGoingToLookUglyInMyDocument} is
not too long any more

\makebox[2.95cm]{\hrulefill} is not too long any more % check

\end{document}

(이 경우 드라이버 코드를 작성할 때 할 수 없는 일부 항목을 하드코딩할 수 있으므로 몇 가지 사소한 변경을 했습니다 expl3!)

답변4

xcolor대신에 를 사용합니다 trimclip. egreg가 올바르게 지적했듯이 원래 답변은 컬러 배경에서 작동하지 않습니다. 그래서 배경색을 지정할 수 있는 선택적 인수(기본값 흰색)를 추가하기 위해 편집했습니다.

\x정의 내부의 지역 변수를 \tleft(oops!) 로 대체하도록 편집되었습니다 #3.

\documentclass{article}
\usepackage{xcolor}
\newcommand\tleft[3][white]{%
  \setbox0=\hbox{#3}%
  \makebox[#2][l]{%
    \ooalign{\mbox{#3}\cr\kern#2\textcolor{#1}{%
      \rule[-\dp0]{\wd0}{\dimexpr\dp0+\ht0}}}}%
}
\begin{document}
\def\x{This is my very long string}
\x

\rule{1.4cm}{2pt}

\tleft{1.4cm}{\x}NEXT
\end{document}

여기에 이미지 설명을 입력하세요

관련 정보