[cstex] Ještě jeden problém s \_

"Procházka Lukáš Ing. - Pontex s. r. o." LPr at pontex.cz
Wed Aug 26 16:51:17 CEST 2009


... Jak Vašemu řešení rozumím (a čemu ne):

1)

{\catcode`\_=13 \expandafter}\expandafter\def\noexpand_{\MyUnderscore}

- Předefinuje makro "\_" tak, že se při použití rozvine na 
\MyUnderscore. (Našel jsem též v TBN na str. 46.)

2)

\def\backslashed{\let\MyUnderscore\_}
\def\uLetter{\let\MyUnderscore_}

- Jsou makra, která - až budou volána - nastaví (ztotožní) \MyUnderscore 
na makro "\_" nebo znak "_".

3) V "\doLOF" se před voláním \section volá \backslashed, čímž se z 
\MyUnderscore stane ekvivalent "\_".

Ale nerozumím: \MyUnderscore se dále nikde nepoužije (nevolá se - nikde 
dále není žádné \MyUnderscore), tak proč se vlastně přenastavuje pomocí 
\let?

4) V "doLOF" se před voláním \Verbatiminput volá \uLetter, čímž se z 
\MyUnderscore stane ekvivalent "_".

A analogická otázka jako v bodě 3).

5) Ještě sem zkoušel zahrnout (ve snaze pochopit Vaše makra - "co jak 
musí být") \doLOF přímo do \LOF - nějak takhle:

\def\LOF#1#2{\begingroup \catcode`\_=13 \endgroup \backslashed 
\section{#1}\begingroup
               \uLetter \VerbatimInput{#2/#1}\endgroup}

- To nefunguje. Ale proč?

Ještě drobné sloučení, které také funguje, ale otázky zůstávají:

\def\LOF{\begingroup \catcode`\_=13 \doLOF}
\def\doLOF#1#2{\endgroup
               \let\MyUnderscore\_ %\backslashed
               \section{#1}\begingroup
               \let\MyUnderscore_ %\uLetter
               \VerbatimInput{#2/#1}\endgroup}


Děkuji za trpělivost.

Zdravím

Lukáš Procházka


Zdenek Wagner wrote:
> 2009/8/26 "Procházka Lukáš Ing. - Pontex s. r. o." <LPr at pontex.cz>:
>   
>> ... I mně to funguje - mnohokrát děkuji.
>>
>> Zhruba rozklíčovávám, jak Vaše makro pracuje (asi mě to dost obohatí, jestli
>> je pochopím beze zbytku). Sám bych jej dohromady nedal.
>>
>>     
> Základ je, že se vše musí expandovat ve správném okamžiku. To mě učil
> v mých začátcích v roce 1992 Phil Taylor. Trik s \expandafter je z
> TBN, díky tomu nepotřebuji globální definici, protože v některých
> situacích je \gdef nežádoucí.
>
>   
>> S přáním hezkého zbytku dne
>>
>> Lukáš Procházka
>>
>>
>>
>> Zdenek Wagner wrote:
>>     
>>> 2009/8/26 "Procházka Lukáš Ing. - Pontex s. r. o." <LPr at pontex.cz>:
>>>
>>>       
>>>> Dobrý den,
>>>>
>>>> řeším ještě jeden problém s interpretací znaku "_".
>>>>
>>>> Pokouším se vyrobit makro:
>>>>
>>>> \def\LOF#1#2{\subsubsection*{Výpis souboru #1:}\VerbatimInput{#2/#1}}
>>>>
>>>> Tj. takové, které napíše jakýsi napdpis "Výpis souboru:" a potom jej
>>>> vylistuje pomocí \Verbatiminput (fancyvrb.sty).
>>>>
>>>> Paramtery, které se předávají, je #1 - jméno souboru, #2 - cesta k němu.
>>>>
>>>>
>>>>         
>>> \documentclass{article}
>>> \usepackage{fancyvrb}
>>> \def\LOF{\begingroup \catcode`\_=13 \doLOF}
>>> \def\doLOF#1#2{\endgroup \backslashed \section{#1}\begingroup
>>>    \uLetter \VerbatimInput{#2/#1}\endgroup}
>>> {\catcode`\_13
>>> \expandafter}\expandafter\def\noexpand_{\MyUnderscore}
>>> \def\backslashed{\let\MyUnderscore\_}
>>> \def\uLetter{\let\MyUnderscore_}
>>> \begin{document}
>>> \LOF{a_b.txt}{./}
>>> \end{document}
>>>
>>> Tohle mi funguje.
>>>
>>>
>>>       
>>>> Problém ovšem je, že jménem souboru je "_Bm1.bat" (a cesta např.
>>>> "C:\Test\Be-v12"), takže volání:
>>>>
>>>> \LOF{_Bm1.bat}{C:/Test/Be-12} kolabuje s hláškou:
>>>>
>>>> ! Missing $ inserted.
>>>> <inserted text>
>>>>              $
>>>> l.89  }
>>>>
>>>> Podobně \LOF{\_Bm1.bat}{C:/Test/Be-12} nefunguje:
>>>>
>>>> ! FancyVerb Error:
>>>>  No verbatim file X:/Users/LPr/Public/Beam.1-3/../\protect \unhbox
>>>> \voidb at x
>>>> \k
>>>> ern .06em\vbox {\hrule width.3em}Bm1.bat
>>>> .
>>>> \FV at Error ... {FancyVerb Error:
>>>> \space \space #1
>>>> }
>>>>
>>>> l.89  }
>>>>
>>>> Zkrátka - kvůli \section potřebuji předávat \_Bm1.bat, kvůli
>>>> \Verbatiminput
>>>> _Bm1.bat.
>>>>
>>>> Podotýkám, že znak "_" (i "-" kvůli \shorthandoff{-}) se nemusí
>>>> vyskytovat
>>>> pouze na prvním místě, ale kdekoli ve jméně souboru nebo cesty.
>>>>
>>>> Neřešil někdy někdo podobný problém? Jak to vyřešit?
>>>>
>>>> Zdravím
>>>>
>>>> Lukáš Procházka
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> csTeX mailing list
>>>> csTeX at cs.felk.cvut.cz
>>>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>>>
>>>>
>>>>
>>>>         
>>>
>>>
>>>       
>> _______________________________________________
>> csTeX mailing list
>> csTeX at cs.felk.cvut.cz
>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>
>>
>>     
>
>
>
>   
-------------- next part --------------
A non-text attachment was scrubbed...
Name: LPr.vcf
Type: text/x-vcard
Size: 363 bytes
Desc: not available
URL: <http://lists.felk.cvut.cz/pipermail/cstex/attachments/20090826/50cc2bb3/attachment-0003.vcf>


More information about the csTeX mailing list